概述
目录
1、循环结构(while&do-while)
1.1、循环结构
1.2、while循环介绍
1.3、while代码举例
1.4、while练习
1.5、while循环注意事项
1.6、do-while循环
1.7、while和do-while对比
1.8、循环练习:
2、循环结构(for)
2.1、for循环格式
2.2、for循环代码举例
2.3、for和while的区别
2.4、无限循环
2.5、for循环练习
3、循环嵌套
3.1、循环嵌套代码演示
3.2、循环嵌套练习
4、流程控制(continue,break)
4.1、break语句、continue语句
4.2、break语句、 continue语句举例
4.3、使用循环标签
1、循环结构(while&do-while)
在生活中有时我们做某些事情,需要重复性的做好多次,根据具体的情况,最后才能决定是否还需要继续做这件事。
我们要想把生活中的这些重复性的动作在Java中体现出来,这时就需要使用Java提供的循环。
1.1、循环结构
Java中提供的循环有三种:
while循环、do-while循环、for循环。
1.2、while循环介绍
格式:
while( 循环条件 )
{
循环条件成立后要执行的语句; // 循环体
}
if和while的区别:
if( 判断条件 )
{
判断成立后执行的语句;
}
JVM在执行程序的时候,遇到if关键字,这时就会自动的去指定if身后小括号中的表达式,最后根据这个表达式的真假确定是否执行if控制的语句。不管判断是否成立,当前的if只执行一次。
while循环的执行顺序:
当JVM在执行程序的过程中,遇到while关键字,这时也会先执行while身后小括号中的表达式, 然后根据表达式的真假确定是否执行while后面大括号中的代码。
当while的条件是true的时候,JVM就会去执行while身后大括号中的语句,当把大括号中的所有语句执行完之后,这时JVM会返回到while的条件地方继续判断。直到while的条件为false的时候,这时这个循环才能结束,继续往下执行和循环并列的语句,如果这里的循环永远不能结束,程序就在这里一直循环。
代码举例:
1.3、while代码举例
//演示while循环的执行过程
class WhileDemo
{
public static void main(String[] args)
{
int x = 1;
while( x <= 10 )
{
System.out.println("x="+x);
x++; //++x; x = x + 1; x+=1;
}
System.out.println("over..........");
}
}
1.4、while练习
/*
需求:打印1~100之间能够被3和7同时整除的数。
分析:
1、题目要求1~100之间的数据,首先就要思考怎么把1~100之间的每个数字先提供出来。
2、要提供1~100之间的每一个数字,就是一个重复性的动作,重复的动作可以使用
循环提供。
3、可以从1开始提供,到100结束,在循环的过程中,我们可以提供出1~100之间的每个数字
可是题目并不需要1~100之间的所有数字,而只需要能够被3和 7 整除的数字,
4、这时就需要对循环提供的数字进行过滤,就需要对提供的每个数字进行判断。
对数字进行判断, 符合条件的就打印,不符合就不处理。
5、怎么判断?什么是整除,整除就是被除数 除以 除数 余数为零
if( x % 3 == 0 && x % 7 == 0 )
{
}
步骤:
1、定义变量提供1~100之间的起始数字,
2、使用while循环提供1~100之间的每个数字
3、在while中加入判断进行数据的筛选
4、判断成立打印数据
*/
class WhileTest
{
public static void main(String[] args)
{
int x = 1;
while( x <= 100 )
{
if( x % 3 == 0 && x % 7 ==0 )
{
System.out.println("x="+x);
}
//x一定要随着循环的次数增多,x的值向100靠近,最后保证循环可以正常结束
x++;
}
System.out.println("Hello World!");
}
}
需求:统计1~100之间能够被3整除的数字 个数 和 和值。
题目中需要使用计数器和求和值思想:
计数器:在程序中,一般需要根据条件的判断,然后统计某些符合条件的数据的个数。针对这类问题,需要在程序定义一个变量,这个变量的起始值一般为零。然后在判断中根据判断的条件,在条件成立之后,给这个计数器的变量中进行+1运算。
和值:有时也需要在程序对和值进行统计,这是也需要一个变量,这个变量一般的起始值也是零。
//需求:统计1~100之间能够被3整除的数字 个数 和 和值。
class WhileTest2
{
public static void main(String[] args)
{
int count = 0;//统计个数 计数器
int sum = 0; // 保存和值
int x = 1; // 提供起始数据
while( x <= 100 )
{
//判断能否被3整除
if( x % 3 ==0 )
{
//条件成立,需要统计和值 和个数
count++;
sum = sum + x;
}
//不管判断是否成立,x都需要自加
x++;
}
System.out.println("count="+count);
System.out.println("sum="+sum);
}
}
1.5、while循环注意事项
- 在while的循环的小括号后面一般不要书写 分号。
- 在while的循环条件中,如果直接写true,那么这个循环是一个死循环(无限循环),这时不要在循环的后面在写任何和循环并列的语句。因为后面的语句无法执行到,编译时报错。
- 在while循环的条件中,不能直接false。因为循环体无法执行到。
- 在书写循环的时候,建议循环体都使用大括号。
- 书写while循环的时候,一般循环中都一个变量,在随着循环次数的增加,变量在也在改变,最终通过这个变量,可以保证循环正常的结束。
1.6、do-while循环
格式:
do
{
循环体语句;
}while( 循环条件 );
1.7、while和do-while对比
while循环它是先进行循环条件的判断,判断成立才能进入循环体,如果判断不成立,就直接跳过循环体执行和循环并列的语句。
do-while循环,它是先要把循环体执行一次,然后再去判断,如果判断成立继续执行循环体。直到判断不成立, 再去执行和循环并列的语句。
//while和 do-while的区别
class whileAndDoWhileTest
{
public static void main(String[] args)
{
int x = 11;
while( x <= 10 )
{
System.out.println("x="+x);
x++;
}
System.out.println("==============================");
int y = 11;
do
{
System.out.println("y="+y);
y++;
}
while ( y <= 10 );
System.out.println("Hello World!");
}
}
do-while循环使用的场景:
当不管循环的条件是否成立,都需要把循环体先执行一次,这时就可以使用do-while循环。
1.8、循环练习:
/*
需求:完成一个猜数字游戏(假设范围在1~100之间)。
分析:
1、在程序需要先产生一个1~100之间的一个数字
这个功能可以使用Java提供好的一个产生随机数的方法。
2、应该让使用者键盘录入当前准备猜测的那个数字。
我们的程序中就需要获取使用者录入的那个数字。
这个功能Java中也给我们提供好了,不用我们自己开发。
3、使用者猜测的次数现在不知道,但是我们可以知道当使用者猜中之后,程序就需要结束。
如果使用者根本就没有猜中,那么就需要往复重复的让使用者输入猜测的数字,
然后我们输入的数字进行判断。
4、假设没有猜中,我们就需要给出提示,提示猜测的数字和预期的数字的大小关系。
大小关系就需要使用if判断。
===============需要准备的额外技术=============================
获取键盘录入的方式:
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
产生一个随机数:
Random r = new Random();
int guessNum = r.nextInt(100); 会产生一个在1~100之间的数字
*/
import java.util.Scanner;
import java.util.Random;
class GuessNumber
{
public static void main(String[] args)
{
System.out.println("请输入您准备猜测的数字(1~100):");
//用于获取键盘录入的程序
Scanner sc = new Scanner(System.in);
int guessNum = sc.nextInt();
//产生一个随机数
Random r = new Random();
int RandomNum = r.nextInt(100);
//开始使用循环确定用户是否猜中
while( guessNum != RandomNum ) //用户输入的值和随机数相等了,循环就应该结束,表示猜中了
{
//如果这个循环成立了,说明用户第一次没有猜中
if( guessNum < RandomNum )
{
System.out.println("您猜小了");
System.out.println("请输入您准备猜测的数字("+guessNum+"~100):");
}
else
{
System.out.println("您猜大了");
System.out.println("请输入您准备猜测的数字(1~"+guessNum+"):");
}
//这里是让用户重新录入新的数字
sc = new Scanner(System.in);
guessNum = sc.nextInt();
//在录入完之后,又会返回到while的条件部分继续判断
}
System.out.println("恭喜您猜中啦,真聪明!!!");
}
}
2、循环结构(for)
2.1、for循环格式
for( 表达式1 ; 表达式2 ; 表达式3 )
{
循环体;
}
在for循环的小括号中需要三个表达式,三个表达式之间需要使用分号隔开。
表达式1:一般是一个定义赋值的表达式。可以省略
表达式2:for循环的条件表达式,表达式2最后计算的结果必须是一个boolean值。可以省略,默认是true
表达式3:一般是循环变量的更新表达式。可以省略
2.2、for循环代码举例
需求:打印1~100之间的能够被3整除的所有数字。
//需求:打印1~100之间的能够被3整除的所有数字。
class ForTest
{
public static void main(String[] args)
{
for( int x = 1 ; x <= 100 ; x++ )
{
if( x % 3 == 0 )
{
System.out.println("x="+x);
}
}
System.out.println("===========================");
for ( int y = 3 ; y <= 100 ; y = y + 3 )
{
System.out.println("y="+y);
}
System.out.println("Hello World!");
}
}
把while循环练习中的 统计1~100之间能够被3整除的数字 个数 和 和值。 改造成for循环。
/// 统计1~100之间能够被3整除的数字 个数 和 和值
class ForTest2
{
public static void main(String[] args)
{
//统计个数
int count = 0;
//统计和值
int sum = 0;
for( int x = 1 ; x <= 100 ; x++ )
{
if( x % 3 == 0 )
{
count ++;
sum += x;
}
}
System.out.println("sum="+sum);
System.out.println("count="+count);
}
}
2.3、for和while的区别
//测试while循环和for循环的区别
class WhileForDemo
{
public static void main(String[] args)
{
int x = 1 ;
while( x < 5 )
{
System.out.println("x="+x);
x++;
}
System.out.println("===============");
for( int y = 1 ; y < 5 ; y++ )
{
System.out.println("y="+y);
}
System.out.println("x="+x);
System.out.println("y="+y);
}
}
for循环和while循环本质是可以互换的。
一般在写while循环的时候,我们提供的,当while循环结束之后,而专门为while循环提供的这个变量依然可以使用。
而对于for循环,一般把控制循环的变量定义在for循环的表达式1的位置上,这时定义的这个变量仅仅只能在for循环中使用,如果出了for循环,程序中就无法在使用这个变量。
如果我们程序中书写的变量仅仅是为了控制循环,而在循环结束之后,这个变量不再使用,这时应该优先考虑使用for循环。而不使用while循环。
2.4、无限循环
无限循环,死循环。程序一直在执行这个循环,而永远不会停止。
一般我们书写循环的时候,都需要定义有效的变量,保证这个循环可以正常的结束。
无限循环的书写格式:
while的格式:
while( true )
{
循环体;
}
for的格式:
for( ; ; )
{
循环体;
}
注意:只要使用无限循环,那么在循环的下面不要再写任何的语句。
2.5、for循环练习
/*
需求:提供1~1000(不包含1000)之间,个位数的立方+十位数的立方+百位数的立方 = 原数。
分析:
1、需要提供1~1000之间的每个数字,这样有序在增加的数字,可以使用循环体提供,
每循环一次,就能够提供1~1000之间的某个数字。
2、上述分析中,发现需要循环提供,但是在循环结束之后,提供1~1000之间的每个数字的变量
基本就没有用途了。这样我们可以使用for循环提供这些数字
3、循环把所有的数字全部提供出来,但是我们并不需要所有数字,只需要符合题目需求的部分数字。
这样就需要在循环加入if判断,对提供的数字进行过滤。
4、判断的条件是要取出当前循环提供的这个数字的 个位 十位 百位上的数字,然后还要进行其他的运算
我们首先应该考虑怎么把循环提供的这个数字进行个十百位上的数字的拆分
123/100 1
123%100/10 2
123%10 3
5、获取到 个位 十位 百位上的数字 这时就可以计算它们各自的立方 和 然后和当前循环提供的这个数字进行比较
如果相等就打印,不相等就不处理。
*/
class ForTest3
{
public static void main(String[] args)
{
for ( int x = 1 ; x < 1000 ; x++ )
{
//定义三个变量,记录拆出来的 个位 十位 百位上的数字
int g = x % 10;
int s = x %100/10;
int b = x / 100;
//定义一个变量记录个位 十位 百位上的数字立方和
int value = g*g*g + s*s*s + b*b*b;
//判断个位 十位 百位上的数字 立方和 是否等于原数
if( value == x )
{
System.out.println("x="+x);
}
}
System.out.println("Hello World!");
}
}
3、循环嵌套
循环嵌套:在循环中还有循环。学习过的所有的语句,都可以互相的嵌套。
3.1、循环嵌套代码演示
总结:
针对循环嵌套:外循环执行一次,内部的循环要从头到尾彻底执行结束。如果在执行的过程中,内部循环没有执行完,是不会去执行外部循环的。
特别注意:内部循环的循环体执行完之后,需要进入到内部循环的表达式3中去继续执行。
3.2、循环嵌套练习
/*
打印如下图形:
*
**
***
****
*****
上述的图形,我们先不考虑每个几个星号,先看最多有几个星号。
那么我们就可以先打印每行都有5个星号的图形。
for ( int i = 0 ; i < 5 ; i++ ) //控制打印几行
{
for ( int j = 0 ; j < 5 ; j++ ) //可以在一行中打印5个星号
{
System.out.print("*");
}
System.out.println();
}
上述代码可以打印5行5列的星号,但是题目要求,每行中的星号随着行数的增加在增加。
我们需要控制每行到底能够打印几个星号。
在第一行中只能打印1个星号,第二行打印2个 以此类推 第五行 打印5个
随着行数的增加,打印的星号个数也在增加。
* * * * *
* * * *
* * *
* *
*
*/
class ForForTest2
{
public static void main(String[] args)
{
//int x = 0;
for ( int i = 0 ; i < 5 ; i++ ) //控制打印几行
{
for ( int j = 0 ; j <= i ; j++ ) //可以在一行中打印5个星号
{
System.out.print("*");
}
//x++;
System.out.println();
}
}
}
/*
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
......
1*9=9 2*9=18 3*9=27 ....... 9*9=81
*/
class ForForTest3
{
public static void main(String[] args)
{
for ( int i = 1 ; i <= 9 ; i++ ) //控制行的
{
for ( int j = 1 ; j<=i ; j++ ) // 控制每行中打印的具体数据
{
System.out.print( j + "*" + i + "=" + ( j*i ) +"t");
}
System.out.println();
}
}
}
4、流程控制(continue,break)
在循环的执行过程中,有时我们需要对循环进行控制,而不是让循环从头到尾彻底执行完。这时我们需要在程序加入流程控制的关键字。
4.1、break语句、continue语句
break:它主要是在程序中跳出当前正在执行的代码。
break,它主要用在switch的case中,或者用在循环中。
当用在switch中的时候,在程序执行switch中的代码是有,遇到break,会导致当前这个switch代码彻底结束,而去执行和switch结构上并列的语句。
当break使用在循环中的时候,只要JVM遇见break,就立刻让当前循环结束,不管循环条件是否还成立,循环都会强制结束。
continue:它主要用在循环中,不能使用在其他地方。
4.2、break语句、 continue语句举例
//从1开始统计,能够被3整除的数字个数,当统计到第100个时停止。
class BreakDemo
{
public static void main(String[] args)
{
//演示break的用法
int count = 0 ;
for ( int i = 1 ; ; i++ )
{
if( i % 3 == 0 )
{
count ++;
}
//判断count 是否等于100 ,如果等于了100 就需要结束循环
if( count == 100 )
{
break;
}
}
System.out.println("count="+count);
System.out.println("Hello World!");
}
}
continue:它的执行原理:当在循环中遇到的continue,这时JVM 就不会再执行continue下面属于本循环的其他语句,而直接进入下次循环。
//报数游戏,遇到数字中包含 7 和 7 的倍数时 需要跳过,然后接着输出后续的数字
// 1~100之间
class ContinueDemo
{
public static void main(String[] args)
{
for ( int i = 1; i<100 ; i++ )
{
//这里需要对提供的i 进行判断
if( i % 7 == 0 || i % 10 == 7 || i / 10 == 7 )
{
System.out.println("过");
continue;
}
System.out.println(i);
}
System.out.println("Hello World!");
}
}
4.3、使用循环标签
break和continue 如果作用在循环中的时候,它们仅仅只能控制自己所属的那个循环。
有时我们希望通过 break 和continue操作的循环不是自己所在的循环,而是外层的其他循环,这时我们需要给不同的循环起名,然后在break 和continue的后面直接书写循环的名字即可。
class MarkDemo
{
public static void main(String[] args)
{
//循环的标记
wc:for ( int i = 0; i<1000 ; i++ )
{
nc:for ( int j = 0; j<1000 ; j++ )
{
//假设 i * j 的值大于的40000 强制停止所有的循环
if( i * j > 40000 )
{
break wc;
}
System.out.println("i*j="+(i*j));
}
}
System.out.println("Hello World!");
}
}
注意:break和continue单独存在在循环中的时候,后面不能写语句。
同时在程序,不能直接书写break和continue。因为他们要和循环结合使用。
最后
以上就是要减肥盼望为你收集整理的第四节:循环、嵌套的全部内容,希望文章能够帮你解决第四节:循环、嵌套所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复