一.流程控制语句
1.循环结构语句之for
格式
for(初始化语句;条件表达式;控制体语句或者步长语句){ 循环体语句; } //降低了冗余度
执行流程
- 初始化语句:给变量赋值 (只执行一次)
- 然后执行条件表达式,看其是否成立,如果成立,执行的是循环体语句------>再次回到控制体语句或者步长语句--->变量自增或者自减
- 随后再次执行条件表达式,看其是否成立,成立,继续循环体语句---->再次回到控制体语句或者步长语句---->变量自增或者自减
....
- 一直执行到条件表达式不成立,for循环结束;
举例
需求:
- 在控制台输出1-10的每一个数据
- 循环的求和思想
- 在控制台输出1-10的之间的所有的数据之和
求和思想:
- 将上面的这种格式变形一下:
定义一个结果变量: 从0开始 sum这个变量
0 + 1 = 1 ;
1 + 2 = 3 ;
3 + 3 = 6 ;
6 + 4 = 10 ;
- 10 +5 = 15 ;
....
- 10 +5 = 15 ;
- 两个加数:
- 前面的这个加数:就是求和结果变量sum,从0开始
- 后面的这个加数:就是1-10的数据;
使用步骤:
- 定义一个最终结果变量sum,从0开始记录
- 使用 for(初始化语句;条件表达式;控制体语句){
//循环体语句
//先取出来每一个数据
使用结果变量就是上面的数据求和,然后再赋值给最终结果变量;
}
- 输出sum即可
public class ForDemo {
public static void main(String[] args) {
//定义一个结果变量
int sum = 0 ;
for(int x = 1 ; x <=10 ; x ++) {// 1-10之间的数据
//x的取整:1,2....10;
sum += x ; //sum = sum + x ;
}
System.out.println("1-10的数据之和是:"+sum);
}
}
经典-水仙花数
需求:在控制台输出所有的水仙花数
水仙花数
- 水仙花指的是三位数,而且这个三位数的每一个位上的立方相加就是当期数据本身
举例:153 = 1 1 1 + 555 + 333
- 153 % 10 = 3 ;---确定个位的数据
- 153 / 10 % 10 = 5 --- 确定十位的数据
- 153 /10 /10 %10 = 1 --- 确定百位上的数据 或 153 / 100 = 1
分析:
- 三位数,明确了范围 100-999---使用for循环
确定每各位的数据本身的值:
- 定义三个变量,分别代表个位,十位,百位数据本身
- int ge = 当前这个数据 % 10 ;
int shi = 当前这个数据 /10 %10 ;
int bai = 当前这个数据 /10/10 % 10 ;
- for循环中加入逻辑判断
- 如果当前x == (gegege)+(shishishi)+(baibaibai),
- 满足条件,直接输出x
public class forDemo {
public static void main(String[] args) {
System.out.println("水仙花数是:") ;
// 三位数,明确了范围 100-999---使用for循环
for (int x = 100; x < 1000; x++) {
//x:100-999的数据
//确定每各位的数据本身的值:
// 定义三个变量,分别代表个位,十位,百位数据本身
int ge = x %10 ; //x=153
int shi = x /10 %10 ;
int bai = x /10 /10 % 10;
if(x==(ge*ge*ge+shi*shi*shi+bai*bai*bai)){
System.out.println(x) ;
}
}
}
}
2.循环结构语句之while
格式
初始化语句; while(条件表达式){ 循环体语句 ; 控制体语句或者步长语句; }
执行流程:
- 首先,先初始化语句,对变量赋值;
- 执行条件表达式,是否成立;若成立,则执行循环体语句,依据控制体语句进行变量控制--->再次判断条件表达式是否成立,成立,执行循环体语句--->控制体语句进行变量控制
- ...
- 当条件表达式不成立,while循环结束;
- 注意事项:控制体语句不要忘了,否则死循环;
举例
- while循环统计水仙花有多少个,并输出
public class WhileTest {
public static void main(String[] args) {
//定义统计变量
int count = 0 ;
//初始化语句
int m = 100 ;
while(m<=999){
//循环体
//求出ge,shi,bai的数据
int ge = m % 10 ;
int shi = m /10 % 10;
int bai = m /10 /10 % 10 ;
//满足条件
if(m ==(ge*ge*ge+shi*shi*shi+bai*bai*bai)){
//统计变量自增
count ++;
System.out.println("第"+count+"次,"+"水仙数是:"+m);
}
m++ ;
}
System.out.println("水仙花数共有:"+count+"个");
}
}
for循环和while循环的区别
1)共同点:
- 都能够描述一种循环思想,可以将重复性冗余代码进行优化,提搞程序阅读性
2)不同点:
格式不同
for(初始化语句;条件表达式;控制体语句){ 循环体语句; }
初始化语句;
while(条件表达式){ 循环体语句; 步长语句; }
场景不同
- for循环:明确循环次数 (开发中优先都使用for)
- while循环:不明确循环次数:
- 举例:
键盘录入一个数据,玩猜数字游戏,你也不知道到录入多少次才能猜中
是否节省内存资源:从格式上说
- for循环的好处:循环结束之后,变量被释放了
- 而while循环,循环结束,依然能够使用这个变量,相对for循环格式来说,比较耗费内存资源
- 实际开发中:for是使用最常见的
3.循环结构语句之do while
格式
初始化语句; do{ 循环体语句 ; 控制体语句 ; }while(条件表达式) ;
这个循环语句和while,for循环最大的区别: 当条件不成立的,循环体至少执行一次.
public class DoWhileDemo {
public static void main(String[] args) {
int x = 6 ; //初始化了
do{
System.out.println("helloJavaSE"); //执行循环体
x++; //7
}while(x<=5) ;
}
}
4.循环结构语句之死循环
死循环的两种格式
第一个格式
for(;;){ 循环体语句; }
第二个格式:
while(true){ //死循环格式中使用比较多 循环体语句; }
举例
猜数游戏
分析:
需要产生一个随机数:java.lang.Math 里面的功能random()产生一个1-100之间的随机数
- jdk提供了类:java.lang.Math
- java.lang包下的类不需要导包,针对数学运算的工具类,提供了很多的方法;
- 获取伪随机数,取值范围:[0.0,1.0)
//不断的键盘录入
while(true){
- 创建一个键盘录入对象,录入int类型
- 录入的数据要和Math里面产生的1-100之间数据进行对比,
- 如果大了,提示 "你要猜的数据大了"
- 如果小了,提示"你要猜的数据小了"
- 如果一致,提示"恭喜您,猜对了"
- 结束死循环,break ;
}
public class DieLooperTest { public static void main(String[] args) { //需要产生一个随机数:java.lang.Math 里面的功能random()产生一个 //1-100之间的随机数 int number = (int) (Math.random() *100 +1); //[0.0-1.0)*100-->[0.0-100.0)-->[1.0-101.0) 强转取整1-100 System.out.println(number) ; //定义统计变量 int count = 0 ; //不断的键盘录入 while(true){ //只要进一次循环就开始计算 count ++; //创建键盘录入对象 Scanner sc = new Scanner(System.in) ; //提示并录入数据 System.out.println("请您输入要猜的数字:") ; int guessNumber = sc.nextInt() ; //使用guessNumber上面的随机数获取到的number进行对比 if(guessNumber>100 || guessNumber< 0){ System.out.println("你要输入数据不合法,它是在0-100之间"); }else if(guessNumber> number){ //如果大了,提示 "你猜的数据大了" System.out.println("你猜的"+guessNumber+"大了") ; }else if(guessNumber <number){ //如果小了,提示"你猜的数据小了" System.out.println("你猜的"+guessNumber+"小了") ; }else{ //如果一致,提示"恭喜您,猜对了" System.out.println("恭喜您,第"+count+"次猜对了") ; //结束死循环 break ; } } } }
5.循环结构语句(补充)
for循环嵌套(双重for循环)
//for循环的嵌套 for(初始化语句1;条件表达式1;控制体语句1){ //可以看做控制行 //循环体就是for循环语句 for(初始化语句2;条件表达式2;控制体语句2){ //可以看做控制列 循环体语句;,,, } }
举例
99乘法表
public class ForForDemo { public static void main(String[] args) for(int x = 1 ; x <= 9 ; x++){ //9行列 for(int y = 1 ; y<= x ; y++){//列数随着x的变化而变化 System.out.print(x + "×" + y + "=" + (y*x) + "\t"); //1*1=1 //2*1=2 2*2=4 //3*1=3 3*2=6 3*3=9 //4*1=4 4*2=8 4*3=12 4*4=16... } System.out.println();//换行 } } }
二.跳转控制语句
1.break
break:中断结束(结束循环或者switch语句中)
public class BreakDemo { public static void main(String[] args) { // break ; //for循环,10次 for(int x = 1 ; x <=10 ; x++){ //加入一个逻辑判断 if(x == 3){ break ; //循环中使用/ switch本身语法就带break } System.out.println(x) ; // 1 2 (x == 3时跳出循环) } } }
2.continue
continue:只是结束当前循环,继续立即进入下次循环(循环语句中使用)
public class ContinueDemo { public static void main(String[] args) { //for循环 for(int x = 1; x<=10 ; x++){ if(x == 2){ continue;//只是结束当前循环,继续立即进入下次循环 } System.out.println(x); //2不输出 //1 //3 //4 //5 //6 //7 //8 //9 //10 } } }
3.return
return:结束方法的 (结束有具体返回值的方法)
- return: 实际开发中,return 需要携带结果,-------引入Java中定义方法
- return: 与Java中的方法相关的,很少单独去使用
public static void main(String[] args) {
System.out.println("程序开始了...");
//for循环
for(int x =1 ; x <=10 ;x ++){
//加入逻辑判断
if(x==3){
System.out.println("条件成立..");
return ; //很少单独用---->结束了方法
}
System.out.println(x) ;
}
System.out.println("程序结束了,Over...");
}