J2SE循环结构

第三天课堂内容

课堂内容:

1.分支语句if\else

2.分支语句switch

3.循环语句

一、分支语句if\else

​ 1.只有if的语句

​ if(表达式1){

​ 表达式2;

​ }

​ 表达式1如果为true,执行表达式2的语句

/*
         * 年龄为36岁的,工资加1000
         */
        if (age == 36) {
            salary += 1000;
        }

​ 2.if\else

​ if(表达式1){

​ 表达式2;

​ }else{

​ 表达式3;

​ }

​ 表达式1如果为true,执行表达式2的语句,否则执行表达式3

/*
         * 年龄小于30岁的,统统加班,否则工资加500
         */
        if (age < 30)
            System.out.println("苦逼程序员天天加班");
        else
            salary += 1000;

​ 3.嵌套if

/*
         * 年龄小于30岁大于25,并且工资在8000,工作就升值为项目组长 
         * 年龄大于或等于30岁,并且工资在10000,工作就升值为项目经理
         * 年龄大于或等于40岁,并且工资在20000,工作就升值为项目总监
         * 
         * 都不满足,职位就是CEO
         */   
        if (age > 25 && age < 30) {
            if (salary == 8000)
                job = "项目组长";
            else
                job = "";
        } else if (age >= 30 && salary == 10000) {
            job = "项目经理";
        } else if (age > 40 || age == 40) {
            if (salary == 20000)
                job = "项目总监";
        }else
            job="走上了人生巅峰,CEO";

二、分支语句switch

​ 注意:1.switch中在jdk1.7之前只允许byte\short\int\char ,1.7之后加入了String

​ 2.switch语句先匹配case,case中没有匹配项,就执行default语句

​ 3.case如果没有break,那么程序会继续往下执行其他的case或default语句,直到遇到break才停止

​ 4.default语句可以放在switch任何地方,没有位置限制,如何case执行后没有break就会执行default语句,default语句(如果在多个case中间)也没有break,会继续执行后面case语句。

    int age = 30;
​
        String job = "";
​
        double salary = 6000.50;
​
/*
     * 年龄为36岁的,工资加1000
     */
    /*switch(age) {     
            case  36:
                salary+=1000;
    }
    
    System.out.println(salary);
    */
    
    /*
     * 年龄为30岁的,工资加500
     * 年龄为35岁的,工资加1000
     * 年龄为40岁的,工资加2000
     * 否则统一加100
     */
    /*switch(age) {     
            case  30:
                salary+=500;    
                break;//没有遇到break语句程序会继续往下执行,直到遇到break才跳出switch结构
            case 35:
                salary+=1000;
                break;
            case 40:
                salary+=2000;
                break;
            default:
                salary+=100;
                break;
    }
    
    System.out.println(salary);*/

​ ​ /* switch(age) { case 30: salary+=500; break; default: salary+=100; break; case 35: salary+=1000; break; case 40: salary+=2000; break;

}*/

    /*switch(age) { 
    default:
        System.out.println("default");
    case  30:
        System.out.println("30");   
    case 35:
        System.out.println("35");
    case 40:
        System.out.println("40");
}*/

​ ​

    switch("你好") {          
    case  "你好":
        System.out.println("30");   
    default:
        System.out.println("default");
    case "1":
        System.out.println("35");
    case "a":
        System.out.println("40");
}
}

三、循环语句

1.while循环

/**
         * 打印100个*号
         */
//      int len = 1;
//      while(len<=100) {           
//          System.out.print("*");
//          ++len;
//      }
        

​ /* while(表达式1) { 表达式2 }*/ 1.首先判断表达式1条件是否为true,为true执行while循环体表达式2 2.执行完循环体再检查while表达式1,以此类推,直到不满足条件就停止

while(true) System.out.print("*");

/*int len=1; do System.out.print("*"); while(len<=100); */ 当循环体的代码只有一行时,可以省略掉大括号

  1. dowhile循环

/*  int len = 1;
        do {            
            System.out.print("*"+len);
            ++len;
        }while(len<=100);*/
        /*

​ 1.首先执行do块中的代码,再判断while中德条件是否满足,如何满足再执行do代码块 以此类推,直到不满足条件就停止 2.do的代码因为一开始就会执行一次,比while要多执行一次。

​ /*while(true) { //1 while(true) { ​ } }*/ /*

  • 嵌套循环:首先满足外围循环结构时,就进入到内循环结构,一直执行内循环结构直到不满足

    才会跳出内循环,继续执行外循环,直到不满足条件才停止

3.for循环

 for(表达式1;表达式2;表达式3){
                            表达式4;
                }

执行顺序:

首先执行表达式1;再执行表达式2;再执行表达式4,最后执行表达式3从第二次开始执行2、4、3、一直循环到2的不满足为止表达式1只会执行一次,一般用于变量的初始化表达式2用于条件的判断

标准写法:

for(int i=0;i<100;i++) {
            System.out.println("*");
        }   

for循环的几种变体:

​ 死循环:for(;;);

for(;;) {
            System.out.println("*");
        }

​ 将条件提取到循环结构中:

for(int i=0;;) {
    if(i<100) {
        System.out.println("*");
    }else
        break;
        i++;
    }

作业​

1.求1至1000之间满足“用3除余2;用5除余3;用7除余2”的数,且一行只打印5个数

package lianxi01;
​
public class Remainder {
    static int j =0;
    public static void main(String[] args) {
        for (int i = 1; i < 1000; i++) {
            if (i%3==2 && i%5==3 && i%7==2) {   
                    System.out.print(i+"\t");
                    j++;
            }
            else continue;
            if(j!=0 && j%5==0) System.out.println("\n");
        }
    }
}

2.求1-3+5-7+ …… -99+101的值

package lianxi03;
​
public class Accumulate {
    public static void main(String[] args) {
        int sum = 0;//定义和
        int sign =1;//定义符号
        for (int i = 1; i < 102; i+=2) {
            sum += i*sign;
            sign = -sign;   
            }
        System.out.println(sum);
        }
}

3.打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身

package lianxi02;
​
public class Daffodil {
    public static void main(String[] args) {
        //x代表百位数,y代表十位数,z代表个位数
        for (int x = 0;x<9 ; x++) {
            for (int y = 0; y<9; y++) {
                for (int z = 0 ; z<9; z++) {
                    if (x!=0 && (100*x+10*y+z)==(x*x*x + y*y*y + z*z*z)) {
                        System.out.println(100*x+10*y+z);
                    } else continue;
                }
            }
            
        }
    }
}

4.输入两个正整数m和n,求其最大公约数和最小公倍数

package lianxi04;
import java.util.Scanner;
public class Approximation {
    public static void main(String[] args) {
        int yueshu = 0;
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入正整数m:");
        int x = sc.nextInt();
        System.out.println("请输入正整数n:");
        int y = sc.nextInt();
        int max = Math.max(x,y);
        
        for (int i = 1; i < max+1; i++) {
            if(x%i == 0 && y%i == 0) {
                 yueshu = i;
            }
        }
        
        System.out.println("最大公约数是:"+yueshu);//最大公因数是两个数中共有约数最大的一个
        System.out.println("最大公倍数是:"+x*y/yueshu);//最小公倍数等于两数的乘积/最大公约数
    }
}

5.百元百鸡问题:公鸡5元一只,母鸡3元一只,3只小鸡1元,如果用100元钱,买100只鸡,不佘不欠,可以买公鸡,母鸡,小鸡,各多少只。

package lianxi05;
/**
 * x表示公鸡数,y表示母鸡数,z表示小鸡数
 * @author nice
 *
 */
public class Chicken {
public static void main(String[] args) {
    for (int i = 0; i < 100; i++) {
        for (int j = 0; j < 100; j++) {
            for (int z = 0; z < 100; z++) {
                if ((5*i+3*j+z/3==100)&&i+j+z==100) {
                    System.out.println("公鸡"+i+"只"+"母鸡"+j+"只"+"小鸡"+z+"只");
                    continue;
                }
            }
        }
    }
}
}

6.编写一个Java应用程序,用循环结构打印如下的数值列表:N 10N 100N 1000*N1 10 100 10002 20 200 20003 30 300 30004 40 400 4000

5 50 500 5000

package lianxi06;
​
public class Numerical {
public static void main(String[] args) {
    System.out.println("N"+"\t"+"10*N"+"\t"+"100*N"+"\t"+"1000*N");
​
    for (int i = 1; i < 6; i++) {
        System.out.println(i+"\t"+i*10+"\t"+i*100+"\t"+i*1000);
    }
}
}

7.打印2到10000的所有素数,每行显示8个素数

package lianxi07;
/**
 * 打印2-10000的所有素数
 * 质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数。
 * @author nice
 *
 */
public class Prime {
    public static void main(String[] args) {
        int i= 0;
        int a =0;
        for (i = 2;  i<= 10000; i++) {
            if (getPrime(i)==true) {
                System.out.print(i+"\t");
                a++;    //输出个数计数器,达到8就换行
            }
            else continue;
            
            if (a!=0 && a%8==0) {
                System.out.print("\n");
            }
        }
    }
    
    public static boolean getPrime(int i) {
        int max = i/2 +1;
        for (int j = 2; j < max; j++) {
            if (i%j ==0) {
                return false;
            }
        }
        return true;
    }
}

8.商品价格表

(1)用户从控制台输入需要查询的商品编号,根据编号现实对应商品价格。 (2)循环查询商品价格 (商品名称 单价) (3)输入n退出循环

package lianxi08;
import java.util.Scanner;
​
public class Commodity {
    public static void main(String[] args) {
        String goods0 = "商品a",goods1="商品b";
        double price0 = 88.0,price2 = 75.2;
        int number0 = 456; int number1 = 457;
        boolean a = true;
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入商品编码:");
        //String x = sc.next();
        while(true) {
            String x = sc.next();
            if (x.equals("n")) {
                System.exit(0);
            }
            switch (x) {
            case "456":
                System.err.println("商品a 售价:"+price0);
                break;
            case "457":
            System.out.println("商品b 售价:"+price2);
            default:
                System.out.println("商品不存在");
                break;
            }
        }   
    }       
}

9.开发一个标题为"FilpFlop"的游戏程序。它从1计数到100,遇到3的倍数就替换为单词Filp,5的倍数就替换为单词Flop,既为3的倍数又为5的倍数则替换单词FilpFlop.

package lianxi09;
​
public class FilpFlop {
public static void main(String[] args) {
    for (int i = 1; i <= 100; i++) {
        if (i%(3*5) == 0) {
            System.out.println("FilpFlop");
        }
        else {
            if (i%5 == 0) {
                System.out.println("Flop");
            }
            else {
                if (i%3 == 0) {
                    System.out.println("Filp");
                }
                System.out.println(i);
            }
        }
    }
}
}

面试题

1. 什么时候用for循环,什么时候用while循环
2. while循环和do-while循环的区别
3. break、continue、return的区别

1.如果循环次数在执行循环体之前就已确定,一般用for语句;如果循环次数是根据循环体的执行情况确定的,一般用while语句或者do-while语句。

2.while是先判断在执行,do while是先执行在判断

3..return关键字并不是专门用于跳出循环的,return的功能是结束一个方法。 一旦在循环体内执行到一个return语句,return语句将会结束该方法,循环自然也随之结束。与continue和break不同的是,return直接结束整个方法,不管这个return处于多少层循环之内。 continue的功能和break有点类似,区别是continue只是中止本次循环,接着开始下一次循环。而break则是完全中止循环。

猜你喜欢

转载自blog.csdn.net/xiaoxin1024/article/details/81138193
今日推荐