循环语句
一、for(){}
基本结构:
for( A ; B ; C ) { D }
- A 用来声明并初始化变量
- B 是一个逻辑表达式,用于决定循环是否执行
- C 通常被称作 迭代部分 或 递进部分,用于实现对控制循环的变量的增加或减少等操作
- D 表示循环体中要执行的语句 ( 就是要完成什么任务 )
执行顺序:
A -> B -> D -> C
B -> D -> C
..............
B
public class Loop1 { public static void main(String[] args) { for ( int i = 0; i < 10 ; i++ ) { System.out.println( i ); } System.out.println( "~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~" ); // 在 for 语句中声明并初始化的变量只能在 for 语句块内部使用 for ( int i = 0 , j = 10 ; i < 10 && j > 0 ; i++ , j-- ) { System.out.println( "i = " + i + " , j = " + j ); } } }
二、while(){}
while ( 判断 ) {
循环语句
迭代
}
public class Loop2 { public static void main(String[] args) { // while ( 判断 ) { // 循环语句 // 迭代 // } int i = 10 ; // 声明变量并初始化 while ( i > 0 ) { // 在 while 语句中之后的 ( ) 内执行判断 System.out.println( "i = " + i ); // 这个输出语句相当于循环要完成的操作 i-- ; // 迭代部分 ( 实现变量的变化,比如 变量增长 或 减少 ) } System.out.println( "~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~" ); int j = 0 ; // 初始化 while( j++ < 10 ){ // 迭代 和 判断 System.out.println( "j = " + j ); // 循环要完成的操作 } System.out.println( "~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~" ); int a = 100 ; int b = 200 ; System.out.println( "a = " + a + " , b = " + b ); while( a++ < b-- ); // 没有循环体 System.out.println( "a = " + a + " , b = " + b ); } }
三、do{}while()
1、基本结构
do { } while () ;
注意最后的分号
2、while 循环 和 do...while 循环都可以在不明确循环次数的前提下完成循环操作
3、while 循环会先执行 判断 ( 因为 while 关键字之后就是 逻辑判断表达式 )
4、do...while 循环会首先执行 do 和 while 之间的代码,再执行之后才进行判断
public class Loop3 { public static void main(String[] args) { // 创建一个用于读取用户输入数据的扫描器 Scanner s = new Scanner( System.in ); int x = -1 ; // 初始化 do { System.out.println( "请输入 0 到 100 之间的数字:" ); x = s.nextInt(); // 读取用户在控制台中输入的整数 System.out.println( "您输入的是 " + x ); } while ( x < 0 || x > 100 ) ; System.out.println( "输入正确" ); s.close(); } }
四、continue and break
1、continue 语句用于实现 略过 循环语句中 本轮操作的后续语句,直接进入下一轮操作
2、continue 默认针对它所在的循环有效 ( 就是 离 continue 语句最近的循环 )
3、break 语句用于跳出循环语句块 ( 整个循环会结束 )
4、break 默认针对它所在的循环有效 ( 就是 离 break 语句最近的循环 )
public class Loop6 { public static void main(String[] args) { for( int i = 1 ; i < 10 ; i++ ) { if( i == 2 ) { // 略过本次循环后续语句直接进入下次 continue ; // 整个循环并没结束,而是略过本轮中后续操作直接进入下一轮操作 } System.out.print( i + " " ); // 循环当中输出的内容不换行 } System.out.println(); // 等到循环执行结束后再输出换行符 System.out.println( "~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~" ); for( int i = 1 ; i < 10 ; i++ ) { if( i == 2 ) { break ; // 跳出循环语句块,整个循环结束 } System.out.print( i + " " ); // 循环当中输出的内容不换行 } System.out.println(); // 等到循环执行结束后再输出换行符 System.out.println( "~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~" ); for( int i = 1 ; i < 10 ; i++ ){ System.out.print( i + ": " ); for( int j = 1 ; j < 10 ; j++ ) { if( i == 5 && j == 5 ) { continue ; } System.out.print( j + " " ); } System.out.println(); } System.out.println( "~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~" ); for( int i = 1 ; i < 10 ; i++ ){ System.out.print( i + ": " ); for( int j = 1 ; j < 10 ; j++ ) { if( i == 5 && j == 5 ) { break ; } System.out.print( j + " " ); } System.out.println(); } } }
五、outer and inner
1、使用 标签(label)(outer,inner) 标识循环语句块
2、在 continue 语句 和 break 语句中可以使用 标签( label ) 来指定针对那层循环
public class Loop7 { public static void main(String[] args) { outer:for( int i = 1 ; i <= 5 ; i++ ){ System.out.print( i + ": " ); inner:for( int j = 1 ; j <= 5 ; j++ ) { if( i == 3 && j == 3 ) { continue inner ; // 在 continue 语句中可以使用 标签 } System.out.print( j + " " ); } System.out.println(); } System.out.println( "~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~" ); outer:for( int i = 1 ; i <= 5 ; i++ ){ System.out.print( i + ": " ); inner:for( int j = 1 ; j <= 5 ; j++ ) { if( i == 3 && j == 3 ) { continue outer ; // 在 continue 语句中可以使用 标签 } System.out.print( j + " " ); } System.out.println(); } System.out.println( "~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~" ); outer:for( int i = 1 ; i <= 5 ; i++ ){ System.out.print( i + ": " ); inner:for( int j = 1 ; j <= 5 ; j++ ) { if( i == 3 && j == 3 ) { break inner ; // 在 break 语句中可以使用 标签 } System.out.print( j + " " ); } System.out.println(); } System.out.println( "~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~" ); outer:for( int i = 1 ; i <= 5 ; i++ ){ System.out.print( i + ": " ); inner:for( int j = 1 ; j <= 5 ; j++ ) { if( i == 3 && j == 3 ) { break outer ; // 在 break 语句中可以使用 标签 } System.out.print( j + " " ); } System.out.println(); } } }
六、十进制(正整数)转二进制
除二取余,除尽为止,(余数)尾首相连
public class Loop4 { public static void main(String[] args) { String s = "" ; s = "abc" ; System.out.println( "s : " + s ); s = "123" + s ; // 注意 s = "123" + s ; 与 s = s + "123" ; 的区别 System.out.println( "s : " + s ); System.out.println( "~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~" ); int x = 25 ; String binary = "" ; final int p = x ; while( x != 0 ){ int y = x % 2 ; // 整除二取余数 binary = y + binary ; // 这里的 + 相当于 字符串连接符 // System.out.println( binary ); // 通过输出语句验证每次循环产生内容 // 对 x 变量的取值整除二取商,并将商赋值到 x 变量中 x /= 2 ; // x = x / 2 ; // System.out.println( x ); // 通过输出可以查看 x 变量中取值的变化过程 } // System.out.println( "x = " + x ); // 验证 x 已经变成 0 ( 就是口诀中的 除尽为止 ) System.out.println( p + " 的二进制形式是: " + binary ); // 如果期望 二进制 形式 是 32 位,可以考虑在 二进制字符串前面补充 字符 0 } }
七、十进制(正整数)转八进制
除八取余,除尽为止,(余数)尾首相连
public class Loop5 { public static void main(String[] args) { final int x = 100 ; // 需要转换的十进制正整数 final int b = 8 ; // 基数 String target = "" ; // 初始化 /* int y = x ; // 初始化 while( y != 0 ) { // 判断 int z = y % b ; // 循环需要完成的操作 s = z + s ; // 循环需要完成的操作 y /= b ; // 迭代 ( 让控制循环的变量变起来 ) } */ for ( int y = x ; y != 0 ; y = y / b ) { target = ( y % b ) + target ; } System.out.println( x + " 的 " + b + " 进制形式是 " + target ); } }
八、十进制(正整数)转十六进制
public class Loop4 { public static void main(String[] args) { String s = "" ; String hex = "" ; int x = 100000 ; int p = x; while( x != 0 ){ int y = x % 16 ; switch (y){ case 10: s = "A"; break; case 11: s = "B"; break; case 12: s = "C"; break; case 13: s = "D"; break; case 14: s = "E"; break; case 15: s = "F"; break; default: s = y + ""; } hex = s + hex ; x /= 16 ; } System.out.println( p + " 的十六进制形式是: " + hex ); } }