Java基础

121 阅读5分钟

「这是我参与11月更文挑战的第12天,活动详情查看:2021最后一次更文挑战」。

程序流程控制

顺序结构

分支结构(C中的选择结构)

循环结构

从键盘获取值

需要用到Scanner类

具体实现步骤:

  1. 导包:import java.util.Scanner

  2. Scanner实例化(类似于造了个对象):Scanner scan = new Scanner(System.in);//scan是变量名可以换,System.in从系统导入

  3. 调用Scanner类的相关方法3字符串chul(变量名.nextXxx),来获取指定类型的变量

    Xxx是变量类型,例如Float,除了字符串(直接用next)

注意:需要根据相应的方法,来输入指定类型的值。如果输入的数据类型与要求的类型不匹配(可以自动转换即可,不一定完全一样)时,会报异常: InputNisMatchExce导致程序终止。

import java.util.Scanner;//导包
public class ScannerText {
    public static void main(String[] args){
        Scanner scan=new Scanner(System.in);//造了一个对象
        //int num= scan.nextInt();//键盘输入int型
        System.out.println("请输入你的名字");
        String name= scan.next();
        System.out.println("请输入你的年龄");
        int age= scan.nextInt();//注意Int的I大写//不能输入double型
        System.out.println("请输入你的体重");
        double weight=scan.nextDouble();//可以填整型数据,会自动转化为double型
        boolean yesno= scan.nextBoolean();//输入一个boolean型变量,注意只能是true和false
        //对于char型的获取,Scanner没有提供相关的方法,只能够获取一个字符串(用字符串获取char)
        System.out.println("性别");
        String gender=scan.next();
        char genderChar=gender.charAt(0);//意义是获取字符串的第几个的字符,注意和C中一样,从0开始,0取得是第一个字符
    }
}

顺序结构

程序从上到下逐行地执行,中间没有任何判断和跳转。

分支结构

if—else
if(表达式){//表达式结果是true进去执行
	代码块
}
if(表达式){//二选一
	代码块
}else{
	代码块
}
if(表达式){//一旦进入了一个if中执行后直接跳出结构,
	代码块
}else if(){//多选一,只执行一次
	代码块
}
...
else{
    代码块
}
puhblic class ifelseText{//用if---else进行三个数比较大小
    public static void main(String[] args){
        int x=10,y=20,z=30,max;
        if(x>y&&x>z){
            max=x;
        }else if(y>x&&y>z){
            max=y;
		}else
            max=z;
        System.out.println(max);
    }
}
例题一(考试奖励)
import java.util.Scanner;
/**小鹏参加Java考试,他和父亲岳不群达成承诺:
    成绩为100分时,奖励一辆BMW;
    成绩为(80,99]时,奖励一台iphone xs max;
    当成绩为[60,80]时,奖励一个iPad;
    其它时,什么奖励也没有。
    请从键盘输入岳小鹏的期末成绩,并加以判断
*/
/**
 * 针对于条件表达式:
 * 如果多个条件表达式之间是“互斥"关系(或没有交集的关系),可以交换顺序
 * 如果多个条件表达式之间有交集,不能交换(必须要按特定顺序)
 * 如果多个条件表达式之间有包含关系,大的在下面,小的在上面(保证每一个都有机会执行)
 */
public class IfText {
    public static void main(String[] args){
        Scanner scan=new Scanner(System.in);
        System.out.println("输入成绩");
        int grade= scan.nextInt();//score也是成绩
        if(grade<60){//if---else if---最后可以没有else(else结构可选)
            System.out.println("什么奖励也没有");
        }else if(grade<80&&grade>=60){
            System.out.println("奖励一个pad");
        }else if(grade<99){
            System.out.println("奖励一个iphone");
        }else if(grade==100){
            System.out.println("奖励一个BWM");
        }else{
            System.out.println("什么奖励也没有");
        }
    }
}

还有一些有趣的例题在其他文章里: 链接:有趣例题

switch—case
switch(表达式){//根据switch表达式中的值,依次匹配各个case中的常量。
 //一旦匹配成功,则进入相应case结构中,调用其执行语句。当调用完执行语句以后,则仍然继续向下执行其他case结构中的执行语句,直到遇到break关键字或此switch-case结构末尾为止结束。
    case 常量1://break,跳出switch-case结构
         语句1;
         //break;
    case 常量2://常量可以是字符串常量、与String类型的表达式匹配
         语句2;
         //break;
    ……
    case 常量n:
         语句n;
         //break;
    default://default类似于else,是可选的(可以没有),并且位置灵活
         语句;
         //break;
}

switch中的表达式只能是如下的六种数据类型之一:byte、short、int、char、枚举类型(JDK5.0新增)、String类型(JDK7.0新增)

例题一(大小写转换,键盘输入char类型)
import java.util.Scanner;
/**
 * 使用switch把小写字母转化成大写只有(a、b、c、d、e),其他输出other
 */
public class SwitchText {
    public static void main(String[] args){
        Scanner scan=new Scanner(System.in);
        String at= scan.next();
        char art=at.charAt(0);
        switch(art){
            case 'a'://注意是字符a ,不能直接写a
                System.out.println("A");//写art-32输出出来是数字不是字母
                break;
            case 'b':
                System.out.println("B");
                break;
            case 'c':
                System.out.println("C");
                break;
            case 'd':
                System.out.println("D");
                break;
            case 'e':
                System.out.println("E");
                break;
            default:
                System.out.println("other");
        }
    }
}
例题二(是否及格、复杂的结构转化(使用运算))
/**
 * switch结构写出大于60分及格,小于不及格
 */
public class SwitchTwo {
    public static void main(String[] args){
        int score=80;
        switch(score/60){//麻烦一点可以除以10,注意掌握这种思想
            case 0://也可以先判断,赋变量不同的值,在switch---case	
                System.out.println("不及格");
                break;
            case 1:
                System.out.println("及格");
                break;
        }
    }
}
  		   /**
             * 多个case可以合并(不同case的执行语句相同时)
             *  case 0:
             *  case 1:
             *  case 2
             *  case 3:
             *  case 4: 
             *      System.out.println("及格");
             *      break;
             */
例题三(计算天数(无break的巧用))
import java.util.Scanner;
/**
 * 从键盘上输入2019年的“month”和"day”,要求通过程序输出输入的日期为2019年的第几天。
 */
public class MouthDayText {
    public static void main(String[] args){
        Scanner scan=new Scanner(System.in);
        int year= scan.nextInt(), mouth=scan.nextInt(),day= scan.nextInt();
        int two;
        if(year%100!=0){
            if(year%400==0) {
                System.out.println("是闰年");
                two=29;
            }
            else {
                System.out.println("不是闰年");
                two=28;
            }
        }else {
            if (year % 4 == 0){
                System.out.println("是闰年");
                two=29;
            }
            else {
                System.out.println("不是闰年");
                two=28;
            }
        }
        int count=0;
        switch (mouth){//注意1月不能直接加31,因为还没有过完,只需要加天数即可(5月加前四个月的天数在加五月天数)
            case 12:
                count+=30;//巧用break,***注意要倒着来这样之前的月份才能加上
            case 11:
                count+=31;
            case 10:
                count+=30;
            case 9:
                count+=31;
            case 8:
                count+=31;
            case 7:
                count+=30;
            case 6:
                count+=31;
            case 5:
                count+=30;
            case 4:
                count+=31;
            case 3:
                count+=two;//也可以把是否是闰年的判断嵌套在 case 3中
            case 2:
                count+=31;
        }
        System.out.println(count+day);
    }
}
if—else和switch case关系

switch case执行效率较高能用switch case时且分支不多尽量用