第三天课堂内容
课堂内容:
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); */ 当循环体的代码只有一行时,可以省略掉大括号
-
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则是完全中止循环。