java03循环结构

1.内容回顾:
1.1运算符
算术运算符
关系运算符
逻辑运算符
赋值运算符
byte b = 3; b+=1; 正确的 = b+1; 错误的
字符串连接运算符
三目运算符

1.2分支结构:
   if…else
   switch…case

2.循环结构:
问题:输出10次hello
循环是程序设计语言中反复执行某些代码的一种计算机处理过程,是一组相同或相似语句被有规律的重复性执行
2.1 Java中的循环结构
1. while循环
1.1结构
while(表达式 - boolean){
//要反复执行的代码 – 循环体
}

表达式:对1-100数字进行判断
循环体:对数字进行奇数偶数判断

执行机制:
先对表达式进行运算,如果为true,进入循环体执行内容,完成之后再次对表达式进行判断,如果依然为true,那么继续执行循环体,之后再判断,知道表达式结果为false,此时不进入循环体,直接结束循环。

案例:输出10次hello

练习:输出1-100之间所有的偶数

int i = 1;
     while(i<101){
         //对这个数字进行奇偶判断
         if(i%2==0){
             System.out.print(i+" ");
         }
         //对i自增
         i++;
     }

1.2 break关键字:

break用于循环:跳出当前循环

练习题:

输出1-100之间的所有偶数,输出到56为止

int x = 0;
     while(x<101){
         if(x%2==0){  //是偶数
             if(x==56){
                 //跳出循环
                 break;
             }
             System.out.println(x);
         }
         x++;
     }

练习:
程序随机生成并存储一个整数,(1-100)用户输入一个整数,程序给出与存储的数字“大”或“小”的比较结果提示;直到用户猜对数字为止;如果中途,用户希望结束程序,可以输入0退出。

public class GuessNumberGame {
public static void main(String[] args) {
//随机生成一个随机整数 1-100
int random = (int)(Math.random()*100)+1;
System.out.println(random);
//用户输入整数
Scanner sc = new Scanner(System.in);
System.out.println("请输入猜测的数字:1-100之间,如果输入0,结束程序");
   int num = sc.nextInt();

//进行比较,给出提示
while(num!=random){
    if(num==0){
         System.out.println("即将退出程序!");
         break;
     }
     if(num>random){
         System.out.println("猜大了!");
     }
     if(num<random){
         System.out.println("猜小了!");
     }
     System.out.println("请再次输入数字:");
     num = sc.nextInt();
    }

     if(num==random){
         System.out.println("恭喜你,猜对了!");
     }

     sc.close();
    }

}

1.3 死循环
一般情况下,循环操作中会存在使得循环条件不满足的可能性,否则将成为“死循环”。

while(true){
//循环体
}

死循环是否应该出现的程序中?
如果程序的预期结果不是死循环,那么此时就不应该出现
但是,在java中,有一些场景是需要用死循环来模拟出来的。

3.do..while循环
2.1结构:

 do{
     //循环体
}while(表达式 - boolean);

执行机制:
第一次先执行循环体,再对表达式进行运算,如果返回true,那么再次循环,直到表达式返回false为止,false,循环结束

练习:用户输入密码,如果输入错误,重新输入,直到输入正确
//ATM机输入用户密码,如果错误,重新输入,直到正确
//注意点:变量的作用范围:紧邻它的一对{}

Scanner sc = new Scanner(System.in);
    int password;
do{
System.out.println("请输入密码:");
password = sc.nextInt();
}while(password=123456);

System.out.println("登录成功!");

sc.close(); 

while循环和do…while循环的比较
while:先判断后执行
– while循环的循环体从来没有执行
do..while:先执行,后判断
– 循环体至少执行一次

4.for循环
3.1结构
for(表达式1;表达式2;表达式3){
//循环体
}
表达式1:初始化变量
表达式2(判断条件):一定返回一个boolean
表达式3:变量的变化
执行机制:
初始化部分只执行一次,变量变化部分在第一次的时候不会执行

   for(变量初始化;判断部分;变量变化){}  

练习题:
打印出1-100之间所有的偶数
//输出1-100之间所有的偶数

   for(int i=1;i<101;i++){
               if(i%2==0){
                     System.out.print(i+" ");
                }
   }  

求1-100的和
//求1-100的和

 int sum = 0;
             for(int i=1;i<101;i++){
                 sum += i;
             }
             System.out.println(sum);

求1-100之间所有偶数之和
int sum = 0;
//求1-100之间所有偶数的和

 for(int i=1;i<101;i++){
         //对i进行判断
         if(i%2==0){
             sum += i;
         }
     }
     System.out.println(sum);   

5.注意点:for循环三个表达式特殊用法(4)

1. 
int i= 1for(;i<10;i++){…}

2.
for(int i=1;i<10;){
System.out.println(i);
       i++;
}

3.
for(int i=1,j=1;i<10;i++,--j){}

//for循环中,表达式1和表达式3可以放多个表达式,用,隔开;但是表达式2不可以

4.for(;;){….} //–for循环中的死循环
  1. break,continue得用法:
    break:用于循环,跳出当前循环
    可以用于循环和分支
    continue:可以用于循环
    作用:跳出本次循环,继续下次循环
    4生成随机数:
    Math.random() 0-1随机数 包括0不包括1
    如何取到整数随机数
    int i = (int)(Math.random()*100)

5案例:
1. 1-100求和,当和>300时跳出循环并输出此时i的值
//求1-100的和,当>300结束,并输出i的值

int sum = 0;
     for(int i=1;i<=100;i++){
         sum += i; //300  325
         if(sum >300){
             System.out.println(i); 
             System.out.println(sum); 
             break;
         }


     }
  1. 1-100求和,统计总和时,跳过所有个位为3的数字
    //求1-100的和,个位是3的数字不加
int sum = 0;
     for(int i=1;i<=100;i++){
         //先判断
         if(i%10==3){
             continue;
         }
         sum += i;
     }
     System.out.println(sum);

3.循环问题
循环语句的选择
1.如果业务可以转换为“当…”这样的句式时,优先选择 while语句来实现

案例:年存款利率为3%,本金为10000,存款总额超过12000时收益具体是多少?
10000 0.03 total = 10000+1000*0.03

当总金额超过12000的时候的收益具体是多少

条件:total<=12000
循环体:总金额计算

public static void main(String[] args) {
     //利率0.03,本金10000,计算总金额超过12000时具体收益
     double total = 10000;
     while(total<=12000){
         total += total *0.03;
     }

     double m = total - 10000;
     System.out.println(m);
}

2.如果业务可以转换为“直到…”这样的句式时,优先选择 do-while语句来实现

实例:验证身份时必须提供密码并核对

3.如果业务中可以获取到一个确切的循环次数考虑for循环

  1. 循环嵌套
    1.打印九九乘法表
    //9行9列
for(int i=1;i<10;i++){  //i代表行
         for(int j=1;j<=i;j++){  //j代表列
             //\t  制表符
             System.out.print(j+"*"+i+"="+i*j+"\t"); // 1 * 1 =1 
         }
         System.out.println();
     }

用*打印四行四列的正方形

public static void main(String[] args) {
     //变量代表打印几行
     for(int i=0;i<4;i++){ //i代表行
         //打印4列*
         for(int j=0;j<4;j++){ //j代表列
             System.out.print("* ");
         }
         System.out.println();  //换行
     }
}

2.输出1-100之间所有的质数

//质数 - 输出1-100之间的所有质数
     for(int i=2;i<101;i++){ //i : 1-100
         //对i进行质数判断
         int count = 0;
         for(int j=2;j<=i;j++){//j:2-i
             if(i%j==0){
                 count++;
             }
         }
         if(count==1){
             System.out.print(i+" ");
         }
     }

6.练习:
1.写出输出结果

  1. 有数列:9,99,…,9999999999.(10个9)要求使用程序计算此数列的和,并在控制台输出。
  2. 求100-1000间的水仙花数
  3. 求两个数的最大公约数和最小公倍数
  4. 求一个数的质因数
  5. 程序依次出10道加法题目,由用户输入题目的答案;用户每答完一道题,程序判断对错,并提示:“答对了”或“答错了”;10道题目答完之后,系统计算得分并输出(每题10分);若用户希望提前结束,可以输入-1提前退出。
  6. 案例:累加十次输入的数字的和
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值