【java基础】条件,开关分支语句,循环结构

条件分支语句

Java语言提供了两种判断语句:if语句和switch语句。这两种语句用于实现判断,当符合某些条件时执行某段代码,否则将不执行

语法

  • if(条件判断语句){代码A;} 当条件成立时执行代码A,如果条件不成立则不执行代码A,而是直接执行if的下一句
  • if(条件){代码块1;}else{代码块2;} 当条件成立时执行代码块1,如果条件不成立则执行代码块2。没有一种情况是同时执行代码块1和2
  • if(条件1){代码块1;}else if(条件2){代码块2;}…else{代码块n;} 当条件1成立时执行代码块1,如果条件1不成立继续判断条件2,如果条件2成立则执行代码块2,依次类推。没有一种情况是同时执行代码块1和2
  • 允许多个if之间进行相互嵌套
    需求:要求输入学生性别,如果false则显示女的啊!
Scanner sc = new Scanner(System.in);
boolean bb = sc.nextBoolean();
  if (bb == false) { //判真一般用法为if(bb){} 判假 if(!bb){}
      System.out.println("性别为女");
}

要求输入学生成绩(假设成绩都是整数),如果>60显示及格,否则显示不及格

Scanner sc = new Scanner(System.in);
int score = sc.nextInt();
if (score >= 60) {
     System.out.println("成绩及格");
} else {
           System.out.println("成绩不及格");
}

要求输入学生成绩(假设成绩都是整数),如果>=85显示优秀,如果>=70显示良好,如果>=60显示及格,否则显示不及格

Scanner sc = new Scanner(System.in);
int score = sc.nextInt();
if (score >= 85) {//这里的顺序不能调整,因为条件成立后则立即执行代码块,执行结束则自动跳出
if,不会继续判断
         System.out.println("成绩优秀");
} else if(score>=70) {
          System.out.println("成绩良好");
} else if(score>=60){
          System.out.println("成绩及格");
} else {
         System.out.println("成绩不及格");
}

修改代码

if (score > 70) {
      System.out.println("良好");
} else if (score > 85) { //这里的代码永远不会有执行机会。因为这里的if条件实际上是一个复合
条件,if(score<=70 && score>85){}
     System.out.println("优秀");
} else if (score > 60) { //score<=70 && score<=85 && score>60
      System.out.println("及格");
} else {
     System.out.println("不及格");
}

开关分支语言switch

语法:

   switch(表达式){
        case 值1: 判断表达式的值是否在值1,如果相等则执行代码块1
 
           代码块1; break; 执行完成后,如果没有break,则自动执行后续语句,但是不进行判 定。如果有break则立即中断switch的执行,跳到switch块的下一局继续执行
     多个case语句:
      ... ...
        default:如果所有的case都不能成立,则执行代码块n
        
       代码块n; break;
             }

语法点:

  • 表达式的计算结果可以是整型【不允许long类型】,可以是char,同时允许是字串类型[String]
  • 也可以是枚举类型
  • case值类型必须和switch条件类型相同或者能隐式转换为switch表达式类型
  • case值必须唯一,不能与其它的重复
  • default的位置没有特殊要求,但是一定是所有的case值不相等时才会执行。但是为了增强可读性,所以一般建议写在所有的case之后

需求:输入月份,显示对应的本月的天数

System.out.println("请输入月份:");
Scanner sc = new Scanner(System.in);
int m = sc.nextInt();
switch (m) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
      System.out.println("本月31天");
       break;
case 2:
      System.out.println("请输入年份:");
       int year = sc.nextInt();
        if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
                System.out.println("本月29天");
        } else
               System.out.println("本月28天");
       break;
case 4:
case 6:
case 9:
case 11:
        System.out.println("本月30天");
         break;
    default: //default写在switch内部的任何位置上实际都不会影响执行逻辑,但是不建议,因为会影响可读性
             System.out.println("月份错误!");
              break;
      }
   }
}

三目运算符

三目条件运算符(?:)规则是完全一致的,使用的形式是: x ? y:z;
需求:要求输入两个整数,输出最大的整数
使用if判断的实现方式:

public class Test8 {
     public static void main(String[] args) {
               Scanner sc = new Scanner(System.in);
               System.out.println("请输入第一个整数:");
               int num1 = sc.nextInt();
               System.out.println("请输入第二个整数:");
               int num2 = sc.nextInt();
               int max = num1;
               if (max < num2)
                   max = num2;
              System.out.println("两个整数("+num1+","+num2+")中最大的值为:"+max);
             sc.close();
   }
}

使用三目运算符实现

Scanner sc = new Scanner(System.in);
System.out.println("请输入第一个整数:");
int num1 = sc.nextInt();
System.out.println("请输入第二个整数:");
int num2 = sc.nextInt();
           /*
             * if(num1>num2) max=num1;
             * else max=num2;
           */
int max = num1 > num2 ? num1 : num2;
System.out.println("两个整数("+num1+","+num2+")中最大的值为:"+max);
sc.close();
  • 要求表达式1必须返回值为boolean类型
  • 要求表达式2和表达式3的返回值类型一致
    * Object max = num1 > num2 ? num1 : “num2”;
    题目
int k=100;
int m=99;
int res=k>100?m++:++m;
System.out.println(res); //100 k>100不成立,则直接执行++m,而和表达式2:m++无关,不会
     执行
System.out.println(m); //100

循环结构


循环就是重复做某一件事情。在Java程序中,循环控制即在某一情况下,控制程序重复执行某一条或多条语句,直到遇到终止条件为止

循环语句也称迭代语句,在Java语言中存在的while、for和do-while循环语句
需求:计算1+2+3+…+100=5050

while循环


while是Java中最基本的循环语句,满足条件才执行循环体,如果不满足条件则不执行。所以有可能循环体一次都不执行。

语法:
while(条件){循环体;} 当条件成立时反复执行循环体,每执行一次判断一次条件。

int res=0;//累加器,用于存放每次循环体的执行结果
int k=1;//控制循环次数
while(k<101){
        res=res+k;
        k++;
}
System.out.println("1+2+3+...+100="+res);
int res = 0;// 累加器,用于存放每次循环体的执行结果
int k = 0;// 控制循环次数
while (k++ < 100)
       res += k;
System.out.println("1+2+3+...+100=" + res);
int res = 0;// 累加器,用于存放每次循环体的执行结果
int k = 0;// 控制循环次数
while (++k <= 100)
       res += k;
System.out.println("1+2+3+...+100=" + res);
int res = 0;// 累加器,用于存放每次循环体的执行结果
int k = 1;// 控制循环次数
while(true){//这个写法一般用于没有很明确的次数控制时
      res+=k;
      if(++k>100)
          break; //当满足条件则跳出while循环体
}
System.out.println("1+2+3+...+100="+res);

没有很明确的次数控制
需求:要求输入一个合法的年龄值【和业务需求相关】

int age=0;
while(true){
     System.out.println("请输入学生年龄:");
      age=sc.nextInt();
      if(age>=18 && age<=24)
          break;
       else
         System.out.println("您输入的是"+age+",这是一个不合法的年龄");
}

需求:计算所有100以内奇数的和

int res=0; //累加器
int k=0; //循环控制变量
while(++k<101){
     if(k%2==1)
          res+=k;
}
System.out.println("1+3+5+...+99="+res);

break和continue的用法

int res=0;
int k=0;
while(true){
if(++k>100){
     reak; //跳出循环体,执行循环体后的语句
}
   if(k%2==0){ //如果是偶数不进行累加操作,而是从新开始后续的循环,continue之后的语句不执
行,从头开始下次循环
     continue; //终止本次循环,立即进入下次循环
} else{
    res+=k; //res=res+k
}
      System.out.print(k+"+");
}
System.out.println("="+res);

break和continue的区别:

  • break是立即终止循环,进入循环结构的后续代码继续执行,循环体执行结束
  • continue是终止本次循环,进入下次循环,循环并没有执行结束

do/while循环


语法:
do{循环体;}while(条件); 先执行循环体,然后进行条件判断,如果条件为true,则执行下次循环;如果条件为false则终止循环。
*
不同于while循环的点:do/while循环至少执行循环体一次,而while循环有可能一次都不执行.

int res=0;
int k=1;
do {
    res+=k++; //res=res+k;k++;
} while (k < 101);
System.out.println(res);

for循环


语法:for(表达式1;表达式2;表达式3){循环体;}

  • 执行表达式1
  • 执行表达式2,一般表达式2是一个条件,如果条件为true则执行循环体;如果条件为false则终止循环
  • 执行循环体
  • 执行表达式3
  • 执行第2步骤
    for循环一般用于可以明确循环次数的场景中;while循环一般用于不能预先确定循环执行次数的场景中;do/while循环一般用于不能预先确定循环执行次数,同时要求循环体至少执行一次的场景中
int res=0;
for(int i=1;i<=100;i++){
      res+=i;
}
System.out.println(res);

省略表达式的写法

int k=1;
for(;k<101;k++) res+=k;
int k=1;
for(;;) {
     res+=k++;
     if(k>100) break;
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值