006-Java控制语句

目录

逻辑控制语句

if判断语句

示例

嵌套的if语句

switch语句

循环控制语句

while 循环语句

do..while

do...while和while的区别

for循环(使用最多的一种循环)

循环嵌套


逻辑控制语句

if判断语句

"()"中为逻辑表达式,如果为真则执行"{}"中的程序


if(布尔表达式){
    布尔表达式为真执行的语句;
}



if(布尔表达式){
    布尔表达式为真执行的语句;
}else{
    布尔表达式为假执行的语句;
}



if(布尔表达式1){
    布尔表达式1为真执行的语句;
}else if(布尔表达式2){
    布尔表达式2为真执行的语句;
}else{
    布尔表达式1和2都为假执行的语句;
}


布尔表达式就是返回true或false的语句;如:a > b

示例

int a = 10;
int b = 15;
//-- 返回a和b之间较大的一个数

// 用三元表达式来实现
System.out.println(a > b ? a : b);
 
//-- if判断实现
if(a > b){
    System.out.println(a);
}else{
    System.out.println(b);
}
 
int c = 10;
//-- 返回a、b、c之间最大的一个数
if(a > b && a > c){
    System.out.println(a);
}else if(b > a && b > c){
    System.out.println(b);
}else{
    System.out.println(c);
}

嵌套的if语句

所谓嵌套,就是if语句的花括号内还有另一个if语句:按以上的示例,我们用嵌套的if语句来返回a、b、c之间最大的一个数

int a= 10;
int b = 15;
int c = 10;
//-- 返回a、b、c之间最大的一个数
if(a > b){

    if(a > c){
        System.out.println(a);
    }else{
        System.out.println(c);
    }

}else{// b > a

    if(b > c){
        System.out.println(b);
    }else{
        System.out.println(c);
    }

}

注:以上你会发现,同一个需要,嵌套的if语句代码量大很多,而且容易出错,而且代码可读性差,所以我们在正常开发的过程中应尽量避免采用嵌套if语句。

switch语句

switch(变量) //只能为 5种类型:byte, short, int, enum、String(1.7+)

//变量只能为 5种类型:byte, short, int, enum、String(1.7+)
switch(变量) { 
    case 常量1: 
        //待执行的代码; 
        break; 
    case 常量2: 
        //待执行的代码; 
        break; 
    case 常量3: 
        //待执行的代码; 
        break; 
    default: //待执行的代码;
}

// 虽然 case语句中的 break是可选的,但在绝大多数情况下如果没有 break,程序的逻 辑就会发生错误
// 因此,通常情况下都需要加上 break
// 执行时,如果变量的值与常量1相等,执行待执行的代码,然后break;
/* 
这里的break可以理解为停止执行switch语句,直接执行switch语句之后的代码,如果没有break,即便变量的值不等于常量2,常量2的待执行代码也会执行。(后续我们通过实例来具体说明)
*/
/**
如有一个班的学生成绩,需要给每个学生的成绩打等级
90以上:A+,80~90:A,[70,80):B,[60,70):C,60以下:D......
*/
int x = 90;

// 用if判断打印出成绩对应的等级
if(90 <= x && x <= 100){
    System.out.println("A+");
}else if(x >= 80 && x < 90){
    System.out.println("A");
}else if(x >= 70 && x < 80){
    System.out.println("B");
}else if(x >= 60 && x < 70){
    System.out.println("C");
}else if(x < 60 && x >= 0){
    System.out.println("D");
}else{
    System.out.println("异常数据");
}
 

// 用switch语句实现通过等级打印出成绩区间
String d = "B";//-- char d = 'A+'
switch(d){
     
    case "A+" : 
        System.out.println("成绩在90分以上");
        break;
    case "A" : 
        System.out.println("成绩在80~90分");
        break;
    case "B" : 
        System.out.println("成绩在70~80分");
        break;
    case "C" : 
        System.out.println("成绩在60~70分");
        break;
    case "D" : 
        System.out.println("成绩在60分以下");
        break;
    default :
        System.out.println("没有对应的成绩段");
     
}

注:请自行试试,把常量B及以下的所有语句的break删除,看看打印结果。

循环控制语句

while 循环语句

// 当布尔表达式为真,则执行待执行的代码,如果一直为真则一直执行。
while(布尔表达式){ 
    //待执行的代码; 
}

// 一直执行就是死循环,我们在开发中不允许死循环,所以while循环中不允许直接使用常量true

while(true){

}

// 所以while循环的布尔表达式一般是带变量的逻辑运算或者就是个布尔变量,变量的值会根据循环的执行次数而改变

打印1~100的数

int a = 1;
while (a <= 100){
    System.out.println(a++);
}
// a是变量,在布尔表达式中,循环体重a有变化(a++)

以上程序打印出来,每个数字都换了行,如果不想换行怎么办?

int a = 1;
while (a <= 100){
    System.out.print(a++);
}

// System.out.print打印不换行和System.out.println打印后换行

 以上程序打印出来的数字都是连着的不想连着怎么办?

int a = 1;
while (a <= 100){
    System.out.print(" " + a++);
}

// 每打印一个数字加个空格

现在是隔开了,但都在一行,我想每行只显示10个数怎么办?

int a = 1;
while (a <= 100){
    if(a % 10 == 0){
        System.out.println(" " + a++);
    }else{
        System.out.print(" " + a++);
    }
}

// 在循环中常常加上if语句来进行判断执行

现在也换行了,但是好些数字没有对齐怎么办?

int a = 1;
while (a <= 100){
    if(a % 10 == 0){
        System.out.println(a++ + "\t");
    }else{
        System.out.print(a++ + "\t");
    }
}

// \t制表符,不同于空格,键盘的tab键,我们敲的代码换行缩进等都用这个制表符,才好对齐代码

另一种写法

int a = 1;
while (a <= 100) {
    System.out.print(a % 10 == 0 ? (a++ + "\t\n") : (a++ + "\t"));
}

// 我们用三元表达式将代码简化了,但可读性也差了些,在实际使用中过于复杂的判断还是不要使用三元表达式
// \n是换行的意思,用于相当于 System.out.println();

do..while

do{ 
    //待执行的代码; 
}while(布尔表达式); 
//注意末尾的分号

do...while语句先执行待执行的代码,然后判断布尔表达式,如果表达式为假则停止执行,如果为真则继续执行。

请大家把上面的while语句的示例用do...while写出来

do...while和while的区别

  1. do...while在判断之前执行,而while是先判断后执行
  2. 当布尔表达式一直为假时,do...while语句至少会执行一次待执行代码,而while不会执行

for循环(使用最多的一种循环)

for(变量初始化; 条件判断; 步进){ 
    //待执行的代码 
} 

//注意for括弧中的分号

for循环的执行过程:

  • 1). 执行变量初始化。
  • 2). 执行条件判断。如果条件判断结果为假,那么退出 for 循环,开始执行循环后面的 代码;如果条件判断为真,执行 for循环里面的代码。
  • 3). 执行步进。(i++、i--、i+=7...),注意步进不是只能为1
  • 4). 重复步骤2。

打印1~100的数,每行10个数

for(int i = 1; i <= 100; i++){
    System.out.print(i % 10 == 0 ? (i + "\t\n") : (i + "\t"));
}

以上为标准写法,下面来几个特殊写法(了解即可--奇葩的面试题或考试题中会出现,实际实现中要少用,除非迫不得已)

// 步进的代码写在循环体中
for(int i = 1; i <= 100; ){
    System.out.print(i % 10 == 0 ? (i + "\t\n") : (i + "\t"));
    i++;
}


// 执行变量初始化放在循环体外
int i = 1;
for( ; i <= 100 ; ){
    System.out.print(i % 10 == 0 ? (i + "\t\n") : (i + "\t"));
    i++;
}

// 注:无论表达式如何放,for()括号中的两个英文分号不能少


// 没有条件判断表达式
int i = 1;
for( ;  ; ){
    System.out.print(i % 10 == 0 ? (i + "\t\n") : (i + "\t"));
    i++;
}

// 这是死循环,会一直执行下去

示例:打印1~100之间的偶数,每10个数换行

for(int i = 2; i <= 100; i+=2){
    System.out.print(i % 20 == 0 ? (i + "\t\n") : (i + "\t"));
}

注:

  1. 从2开头每打印一次加2,那么每次打印的就是偶数
  2. 每10个数换行为啥要模20呢?因为2~10中间只有5个偶数,2~20之间才是10个偶数。

循环嵌套

使用循环语句打印出如下五行五列的结果

第1行第1列    第1行第2列    第1行第3列    第1行第4列    第1行第5列    
第2行第1列    第2行第2列    第2行第3列    第2行第4列    第2行第5列    
第3行第1列    第3行第2列    第3行第3列    第3行第4列    第3行第5列    
第4行第1列    第4行第2列    第4行第3列    第4行第4列    第4行第5列    
第5行第1列    第5行第2列    第5行第3列    第5行第4列    第5行第5列

for(int i = 1; i <= 5; i++){
    for(int j = 1; j <= 5; j++){
        System.out.print("第"+i+"行第"+j+"列\t");
    }
    System.out.println();
}

我们把外层循环 i 看做行,内层循环 j 看做列,打印的结果就是一个平面这样就好理解双重循环了。那么问题来了,双重循环都来了,三重循环呢?可以用同样的方式去理解,三重循环就是空间立体的x、y、z数轴。我们在日常开发中遇到三重循环的地方比较少,大部分是双重循环。除非做算法之类的,否则很少用到三重循环。

循环中的控制

  • break语句:经常用在循环语句中,用于跳出整个循环,执行循环后面的代码。但是break只能跳出当前循环。
// 在数组[1,5,2,8,0,9]中查找数字8
int[] arr = {1,5,2,8,0,9};
for(int i = 0; i < 6; i++){
    if(arr[i] == 8){
        System.out.println(arr[i]);
        break;
    }
}

// 变量arr是一个数组,我们将在下一章讲解
// break跳出当前循环,break后不在验证布尔表达式i<6直接结束当前循环
  • continue语句:经常用在循环语句中,用于跳出当前的这个循环(或者是跳出本次循环), 开始下一次循环的执行。
// 在数组[1,5,2,8,0,9]中查找数字8、0、9
int[] arr = {1,5,2,8,0,9};
for(int i = 0; i < 6; i++){
    if(arr[i] != 8 || arr[i] != 0 || arr[i] != 9){
        continue;
    }
    System.out.println(arr[i]);
}

// 在一次循环中,循环体中continue;之后的语句将不会执行,直接进入下一次循环
  • 跳出多重循环,使用标号:aa: for(..){ for(..){ break aa; } }

如上面的打印五行五列,就像教室里的座位一样,最后一排有可能没有5列,比如最后一排只有3列,我们该如何打印?

aa:for(int i = 1; i <= 5; i++){
    for(int j = 1; j <= 5; j++){
        System.out.print("第"+i+"行第"+j+"列\t");
        if(i == 5 && j == 3){// 打印了第5行第3列就结束
            break aa;
        }
    }
    System.out.println();
}

上一篇:005-Java运算符

下一篇:007-Java数组

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值