// 过多的if影响代码可读性,建议最多叠3层 if(){ }else if(){ }else { }多分支 switch
switch( 表达式 ){ case 常量1:语句1; break; case 常量2:语句2; break; ... [ default: 语句n ;] }
细节:
1、case子句中的值必须是常量。
2、不加break则会继续往下执行。
3、case后的常量类型需跟表达式数据类型一致。
4、没有匹配的case时,执行default
5、switch(表达式) 中表达式的返回值必须是:(byte,short,int,char,enum[枚举],String) 中的其中一个
1、判断的具体数值不多,而且符合那6种类型,建议使用switch。
2、对区间判断,对结果为boolean类型判断,使用if,if使用范围更广。
for(循环变量初始化; 循环条件; 循环变量迭代){ 循环 *** 作(可以多条语句); }
案例:
输入年月日,输出为该年的第几天。
import java.util.Scanner; public class Hello{ public static void main(String[] args){ //判断给定一天是这一年的第几天 Scanner in = new Scanner(System.in); int year = in.nextInt(); int month = in.nextInt(); int day = in.nextInt(); int num = 0; for(int i = 1; i < month; i++){ if ( i == 2 ){ // 闰年 if (( year % 4 == 0 && year % 100 != 0 ) || year % 400 == 0) num += 29; else num += 28; } else { if(i != 4 || i != 6 || i != 9 || i != 11) num = num + 31; else num = num + 30; } } num += day; System.out.println(year+"年"+month+"月"+day+"日是该年第"+num+"天"); } }while 循环
先判断再执行
while(循环条件){ 循环体(语句); 循环变量迭代; } //eg: int i = 1; while( i <= 10 ){ System.out.println("Hello"+i++); }do…while 循环
do{ 循环体(语句); 循环变量迭代; }while(循环条件);
注意:
1、先执行再判断,至少执行一次
2、do while是关键字
3、最后有个分号
案例1:九九乘法表
//打印九九乘法表 //外函数控制行,内函数控制列 for(int i = 1; i <= 9; i++){ for(int j = 1; j <= i; j++){ System.out.print(j + " * " + i + " = " + (i * j)+"t"); } System.out.println(); }
打印结果:
案例2 金字塔、菱形
// 实心金字塔 // 每行i*2-1颗星,n-行数个空格 System.out.println("输入实心金字塔的行数:"); Scanner in = new Scanner(System.in); int row = in.nextInt(); for (int i = 1; i <= row; i++){ //输出空格 for(int j = row-i; j > 0; j--){ System.out.print(" "); } //输出星 for (int j = i*2-1; j > 0; j--){ System.out.print("*"); } System.out.println(); } // 与实心不同的是,除了首尾行,中间行只有首尾有星。 // 即,中间再输出(i-1)*2-1个空格 // 可以看作大金子塔内挖空了一个金字塔 System.out.println("输入空心金字塔的行数:"); int row2 = in.nextInt(); for (int i = 1; i < row; i++){ //输出空格 for(int j = row-i; j > 0; j--){ System.out.print(" "); } // 与实心不同的是,除了首尾行,中间行只有首尾有星。 System.out.println("输入空心金字塔的行数:"); int row2 = in.nextInt(); for (int i = 1; i <= row; i++){ //输出空格 for(int j = 1; j <= row-i; j++){ System.out.print(" "); } for(int j = 1; j <= i*2-1; j++){ if(j == 1 || j == i*2-1 || i == row) System.out.print("*"); else System.out.print(" "); } System.out.println(); } }
打印结果:
// 打印空心菱形 System.out.println("输入行数:"); int row3 = in.nextInt(); for (int i = 1; i <= row; i++){ //输出空格 for(int j = 1; j <= row-i; j++){ System.out.print(" "); } for(int j = 1; j <= i*2-1; j++){ if(j == 1 || j == i*2-1 ) System.out.print("*"); else System.out.print(" "); } System.out.println(); } for (int i = 1; i <= row3; i++){ //输出空格 for(int j = 1; j <= i; j++){ System.out.print(" "); } for(int j = 1; j <= (row3-i)*2-1; j++){ if(j == 1 || j == (row3-i)*2-1) System.out.print("*"); else System.out.print(" "); } System.out.println(); }
打印结果:
终止语句块。
break可以和标签使用
label1:{ label2:{ label3:{...break labeln} } }
1、break语句可以通过 label 来指定退出哪层。
2、label1是标签,名字由程序员指定。
3、在实际开发中,尽量不要使用标签。(降低可读性)
4、若没有指定标签,默认退出最近循环体。
案例
//3次输入机会,当输入用户为丁真,密码为666时,登陆成功。 //涉及:字符串匹配,for循环,break跳转控制语句 int n = 3; Scanner in = new Scanner(System.in); while(n-- > 0){ System.out.println("请输入用户名:"); String a = in.next(); System.out.println("请输入密码:"); String b = in.next(); if( a.equals("丁真") && b.equals("666")){ System.out.println("登陆成功");break; }else System.out.println("登录失败,还有"+n+"次机会"); }continue
1、结束本次循环,继续执行下一次循环。
2、也可指明要跳过哪层循环。
使用在方法,表示跳出所在方法。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)