java基础_05_流程控制
一、用户交互Scanner
(译:扫描器)
1、使用next方法接收,只接收空格以前的
package liuchengkongzhi; import java.util.Scanner; public class Scanner01 { public static void main(String[] args) { //创建一个扫描器对象,用于接收键盘数据 Scanner Scanner = new Scanner(System.in); //new Scanner 会自动导入上面的包 import //System out 输出,System in 输入参数 System.out.println("使用naxt方式接收: "); //判断用户有没有输入字符串 if (Scanner.hasNext()){ String str = Scanner.next(); //使用naxt方式接收 System.out.println("输出入的内容为:"+str); //输入:xiao di 输出结果:xiao //使用next方法接收,只接收空格以前的 Scanner.close(); //IO控制流的类,如果不关闭,会一直占用资源 } } }
2、使用nextLine方法接收,只要是回撤键之前的都可以输出
package liuchengkongzhi; import java.sql.SQLOutput; import java.util.Scanner; public class Scanner02 { public static void main(String[] args) { Scanner Scanner = new Scanner(System.in); //new Scanner 从键盘接收数据 System.out.println("使用nextLine方法接收: "); if (Scanner.hasNextLine()){ //判断是否还有输入 String str = Scanner.nextLine(); //等待用户输入 System.out.println("输出的内容为:"+str); //输入:xiao di 输出结果:xiao di //使用nextLine方法接收,只要是回撤键之前的都可以输出 Scanner.close(); } } }
3、没有if 的写法
package liuchengkongzhi; import java.util.Scanner; //没有if 的写法 public class Scanner03 { public static void main(String[] args) { Scanner Scanner = new Scanner(System.in); //从键盘接收输入 System.out.println("请输入参数: "); //等待输入 String str = Scanner.nextLine(); //输入的内容保存到变量 str System.out.println("输出的内容为:"+str); Scanner.close(); } }
4、Scanner拓展1;hasNextInt,hasNextFloat整数小数相关的支持
package JavaBase.liuchengkongzhi; import java.util.Scanner; public class Scanner04 { public static void main(String[] args) { Scanner Scanner = new Scanner(System.in); //从键盘接收数据 //Scanner拓展1;hasNextInt,hasNextFloat整数小数相关的支持 int i = 0; float f = 0.0F; System.out.println("请输入整数: "); //等待输入 if (Scanner.hasNextInt()){ //判断输入的是否有整数 i = Scanner.nextInt(); System.out.println("整数数据: "+ i); }else { System.out.println("输入的不是整数数据: "); } System.out.println("请输入小数: "); //等待输入 if (Scanner.hasNextFloat()){ //判断输入的是否有小数 f = Scanner.nextFloat(); System.out.println("小数数据: "+ f); }else { System.out.println("输入的不是小数数据: "); } Scanner.close(); } }
5、Scanner拓展2, while循环
题:我们可以输入多个数字,并求其总和与平均数,每输入一个数字用回车确认,通过输入非数字来结束,并输出执行结果;
package JavaBase.liuchengkongzhi; import java.util.Scanner; public class Scanner05 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); //Scanner拓展2, while循环 //题:我们可以输入多个数字,并求其总和与平均数,每输入一个数字用回车确认,通过输入非数字来结束,并输出执行结果; double sum = 0; //和 int m =0; //计算输入了多少个数字 System.out.println("请依次输入: "); //等待输入 while (scanner.hasNextDouble()){ //while循环输入 double x = scanner.nextDouble(); //把输入的数据赋值变量x m = m +1; //m++ 循环自增 sum = sum +x; //循环求和 System.out.println("你输入了第"+m+"个数当前结果sum="+sum); } System.out.println(m + "个数的和为" + sum); System.out.println(m + "个数的平均值是"+(sum / m)); scanner.close(); } }
二、顺序结构
package JavaBase.liuchengkongzhi; public class shunxu_Struct01 { public static void main(String[] args) { //顺序结构 System.out.println("hello1"); System.out.println("hello2"); System.out.println("hello3"); System.out.println("hello4"); System.out.println("hello5"); /*输出结果 hello1 hello2 hello3 hello4 hello5 * */ } }
三、选择结构
大纲
1、IF单选择结构
package JavaBase.liuchengkongzhi; import java.util.Scanner; public class If_01 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); //IF单选择结构 System.out.println("请输入内容: "); String s = scanner.nextLine(); //键盘输入的内容赋值s //equals方法:判断字符串是否一致 if (s.equals("hello")){ //如果变量s=hello System.out.println(s); //就输出变量s的值 } System.out.println("End"); //输出end scanner.close(); } }
2、IF 双选择结构 if else
//题:考试分数大于60就是及格,小于60就是不及格;
package JavaBase.liuchengkongzhi; import java.util.Scanner; public class If_02 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); //IF 双选择结构 if else //题:考试分数大于60就是及格,小于60就是不及格; System.out.println("请输入成绩: "); int score = scanner.nextInt(); if (score>=60){ System.out.println("及格"); }else { System.out.println("不及格"); } scanner.close(); } }
3、IF多选择结构 if-else if-else
package JavaBase.liuchengkongzhi; import java.util.Scanner; public class If_03 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); //IF多选择结构 if-else if-else //只要满足一个条件,其他的就不会执行了。 //if语句至多有一个else,在所有else if之后 // System.out.println("请输入成绩"); int score = scanner.nextInt(); if (score==100){ System.out.println("A级"); }else if (score<=100 && score>=90){ System.out.println("B级"); }else if (score<=90 && score>=80){ System.out.println("c级"); }else if (score<=80 && score>=60){ System.out.println("D级"); } else if (score<=59 && score>=0){ System.out.println("不及格"); }else { System.out.println("成绩不合法"); } scanner.close(); } }
4、嵌套的IF机构
5、switch多选择结构
5.1:Switch的Case穿透性——break
package JavaBase.liuchengkongzhi; public class Switch_01 { public static void main(String[] args) { char grade = 'B'; //Switch:匹配一个具体的值,IF是匹配条件,执行case语句时会先匹配,成功即返回当前case的值,然后根据是否有break语句,判断是否输出。 // Case穿透:即如果没有输入break时,会把下方所有的结果都输出,所以一般我们每一个case都会加上break; switch (grade) { case 'A': System.out.println("优秀"); case 'B': System.out.println("良好"); case 'C': System.out.println("及格"); break; //可选项,如果不写break,就是把下面的几个结果都输出来, //以上代码grade=B,会输出良好、及格两个结果,如果这里不加break,则会把挂科、未知等级也输出 case 'D': System.out.println("挂科"); default: //默认,即在以上条件中都找不到的时候直接默认输出的结果。是可选项: System.out.println("未知等级"); } } }
5.2:Switch的规范写法
package JavaBase.liuchengkongzhi; public class Switch_02 { public static void main(String[] args) { char grade = 'G'; //输出结果为未知等级 //Switch_02_规范写法 switch (grade) { case 'A': System.out.println("优秀"); break; case 'B': System.out.println("良好"); break; case 'C': System.out.println("及格"); break; case 'D': System.out.println("挂科"); break; default: System.out.println("未知等级"); } } }
5.3 Switch匹配字符串,以及java的反编译常识
package JavaBase.liuchengkongzhi; public class Switch_03 { public static void main(String[] args) { //Switch_03 JDK7以后支持String字符串 //字符的本质是数字,本处就是使用了idea反编译 //java文件通过编译后成为class文件(字节码文件),字节码文件,人是看不懂的,人要想看懂。所以需要反编译,编译为java程序。 String name = "小帝";//输出结果:匹配 switch (name){ case "小帝": System.out.println("匹配"); break; default: System.out.println("不匹配"); } } }
反编译怎么看???
反编译后的样子
四、循环结构
顺序结构的语句只能执行一次,要想多次执行,就需要使用循环结构了
1、while循环
1.1 while循环基础语法
package JavaBase.liuchengkongzhi; public class While_01 { public static void main(String[] args) { //while循环基础定义 int i = 0; while (i<100){ //(i<100)为真true,就会执行代码,即i大于100时,就失效停止 i++; System.out.println(i);//输出了1-100; } /** * 如果使用顺序结构,代码如下 * int i =1; * System.out.println(i++); * System.out.println(i++); * 。。。。继续写100条sout. */ /** * 死循环,有时候业务中可能需要一直循环的,如等待客户端连接,定时检查,代码如下 * while(true){} * 以上代码没有条件去失效,所以会一直执行 * 开发时应尽量避免这种代码,会影响程序性能 */ } }
1.2、while循环例题
package JavaBase.liuchengkongzhi; public class While_02 { public static void main(String[] args) { //计算1+2+3...+100=? int i = 0; int sum = 0; while (i<=100){ sum = sum +i; i++; } System.out.println(sum); //输出结果5050 } }
2、Do While 循环
2.1、Do while 基础语法
package JavaBase.liuchengkongzhi; public class Do_while_01 { public static void main(String[] args) { //Do while基础语法 int i = 0; int sum = 0; do { sum = sum +i; i++; }while (i<=100);//while在后,所以条件至少执行了一次, System.out.println(sum);//输出结果5050 } }
2.2、while循环和 Do while循环的区别
while先判断再执行
dowhile先执行再判断
package JavaBase.liuchengkongzhi; public class Do_while_02 { public static void main(String[] args) { int a = 0; while (a<0){ System.out.println(a);//由于上面的while循环条件不成立,所以这条根本就没有执行,所以在下面的分隔符之前没有输出 a++; } System.out.println("========================"); do { System.out.println(a);//这里输出了一个0,虽然do while的条件也是不成立,但是至少先执行了一次。 a++; }while (a<0); } } /*最终输出结果: ======================== 0 * */
3、For循环
for循环是工作中,用的最多的,非常重要;
for循环是支持迭代的一种通用结构,是最有效、最灵活的循环结构;
3.1、For循环基础语法,和While循环的区别
package JavaBase.liuchengkongzhi; public class For { public static void main(String[] args) { //For循环基础语法,和while循环的区别
//1、while循环的语法 int a = 1; //初始化条件 while (a<=10){ //条件判断 System.out.println(a); // 循环体 a+=2; //迭代 } System.out.println("While循环结束"); //2、For循环语法 for (int b=1;b<=10;b+=2){ //(初始化;布尔表达式;更新) System.out.println(b); } System.out.println("For循环结束"); } } /* 1、以上两个循环语句实际计算结果是一致的,只是语法不同 2、快捷键:100.for 回车。就可以自动生成for循环语句 3、关于for循环有以下几点说明: 最先执行初始化步骤,可以声明一种类型,可以初始化一个或者多个循环控制变量,也可以是空语句; 然后简称布尔表达式的值,如果为true,循环体被执行,如为false,循环终止,开始执行循环体后面的语句; 执行一次循环后,更新循环控制变量(迭代因子控制循环变量的增减) 再次检测布尔表达式,循环执行上面的过程 for(;1<100;i++){} for(;;i++){} //死循环 for(;;){} //死循环 * */
3.2、题一:计算0到100之间的奇数和偶数的和
package JavaBase.liuchengkongzhi; public class For_02 { public static void main(String[] args) { //题1:计算0到100之间的奇数和偶数的和 int oddsum = 0; //定义奇数和 int evensum = 0; //定义偶数的和 for (int i=1;i<=100;i++){ if (i%2!=0){ oddsum+=i; //如果i不能被2整除那么i就是奇数,则oddsum=oddsum+i }else { evensum+=i; } } System.out.println(oddsum); System.out.println(evensum); } }
3.3、题二:用whIle或者for 循环输出1-1000之间能被5整数的数,每行输出3个
package JavaBase.liuchengkongzhi; public class For_o3 { public static void main(String[] args) { //题2:用whIle或者for 循环输出1-1000之间能被5整数的数,每行输出3个 for (int i=0; i<=100; i++) { if (i%5==0){ System.out.print(i+"\t");// 空格tab \t // print 不会换行,printl会换行 } if (i%(5*3)==0){ //如果能被15整除就换行,即每行3个 System.out.println(); //System.out.println("\n"); // 加/n或者println都可以换行 } } System.out.println("For循环结束"); //While循环方式 int a =0; while (a<=100){ if (a%5==0){ System.out.print(a+"\t"); } if (a%(5*3)==0){ System.out.println(); //System.out.println("\n"); // 加/n或者println都可以换行 } a++; } System.out.println("While循环结束"); } }
3.4、题三:打印九九乘法表
package JavaBase.liuchengkongzhi; public class For_04 { public static void main(String[] args) { //打印九九乘法表 for (int j = 1; j <= 9; j++) { for (int i = 1; i <= j; i++) { System.out.print(j + "*" + i + "=" + (j * i)+"\t"); } System.out.println(); } //第一步:先输出1乘9 System.out.println("=====第一步=begin===="); for (int i1 = 1; i1 <= 9; i1++) { System.out.println(1 + "*" + i1 + "=" + (1 * i1)); } System.out.println("=====第一步=end===="); //第二步:再来一次for循环,使1-9每一个数都乘以1-9;但是这时候是有一半是重复的,比如1*9.就有两次。 System.out.println("=====第二步=begin===="); for (int i3 = 1; i3 <= 9; i3++) { for (int i2 = 1; i2 <= 9; i2++) { System.out.println(i3 + "*" + i2 + "=" + (i3 * i2)); } } System.out.println("=====第一步=end===="); //第三步:将嵌套内的for循环i4 <= 9改为,i4 <= i5,这样的话,就可以去掉重复 System.out.println("=====第三步=begin===="); for (int i5 = 1; i5 <= 9; i5++) { for (int i4 = 1; i4 <= i5; i4++) { System.out.println(i5 + "*" + i4 + "=" + (i5 * i4)); } } System.out.println("=====第三步=end===="); //最后一步调整样式 } }
4、增强For循环:遍历数组的元素
package JavaBase.liuchengkongzhi; public class For_05 { public static void main(String[] args) { int[] numbers = {10,20,30,40,50};//定义了一个数组 //方案一:增强For循环:遍历数组的元素 for (int x:numbers){ //把numbers这个数组每一项遍历出来,赋值给x System.out.println(x); //所以输出结果就是10,20,30,40,50 } //方案二:用基础for循环实现的遍历 for (int i = 0; i < 5; i++) { System.out.println(numbers[i]); //在数组numbers里取出从0-5位数。 //这样操作,输出结果也是10,20,30,40,50 } //以上两种方法,核心是一样的,只不过,增强For循环,是更简单省事的。主要是用来循环数组和集合的; } }
5、break 和continue
5.1、break 和continue的区别
package JavaBase.liuchengkongzhi; public class break_continue_01 { public static void main(String[] args) { //break在循环语句中的使用方法 int i = 0; while (i<100){ //i小于100时执行以下代码 i++; System.out.println(i); if (i==10){ break; //break在循环语句中时,用于强行退出循环,所以这里的输出结果是1-10,不是1-100;直接不执行循环中剩余的语句了。 } } System.out.println("==============="); //break在switch语句中是用于防止Case穿透 String name = "小帝";//输出结果:匹配 switch (name){ case "小帝": System.out.println("匹配"); break;//这里如果不加break ,输出结果就会把下面的两个结果一并输出,造成case穿透 case "大帝": System.out.println("匹配"); default: System.out.println("不匹配"); } System.out.println("==============="); //continue在循环语句中的使用方法 int b = 0; while (b<100){ b++; if (b%10==0){ //当b能被10整除时, System.out.println(); //输出换行 continue; //且跳过, //这里的continue会让程序只要符合条件的就立马跳过,会一直循环,但是碰到他,就跳过。 } System.out.print(b); //所以最终输出的结果就是1-100中,1-9到90-99,每个10,都被跳过了 } System.out.println("==============="); } //break: 在任何循环语句中的主体部分,均可用break控制循环的流程, // break用于强制退出循环,不执行循环中剩余的语句, // break语句也在Switch语句中使用,主要用于防止Case穿透 //continue: 语句用在循环语句体中,用于终止某次循环过程,即跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判断, }
5.2、带标签的continue
package JavaBase.liuchengkongzhi; public class break_continue_label_goto_01 { public static void main(String[] args) { //带标签的continue label用法之goto //打印101-150之间所有的质数 //质数是指在大于1的自然数中,除了1和他本身以外,不能再有其他任何因数的自然数 int count = 0; outer:for (int i = 101; i < 150; i++) { for (int j = 2; j <i/2; j++) { if (i%j == 0){ continue outer; //通过 continue返回到标签的位置 } } System.out.print(i+"\t"); } } }