java学习笔记(5) 控制语句、键盘输入
控制语句:
java控制可以分为7种:
*控制选择结构语句:
*if if else
*switch
*控制循环结构语句:
*for
*while
*do while
*改变控制语句顺序:
*break
*continue
if控制语句:
/* 关于java语言当中的if语句,属于选择结构,if语句又被称为分支语句/条件控制语句; 1、if语句的运发结构:包含4中编写方式 第一种: if(布尔表达式){java语句;...}; 第二种: if(布尔表达式){ java语句;... }else{ java语句;... } 第三种: if(布尔表达式){ java语句;... }else if(布尔表达式){ java语句;... }... 第四种: if(布尔表达式){ java语句;... }else if(布尔表达式){ java语句;... }else{ java语句;... } 重点:只要有一个if分支执行,整个if语句结束; 注意:所有控制语句都是可以互相嵌套的。 注意:嵌套使用的时候,代码格式要保证完美。 注意:if语句中,只有一条java语句的话,大括号可以省略; if(true/false){java语句;} if(true/false) java语句;//但是不推荐使用,这种代码风格不好。不容易看清。 */ public class ifTest01{ public static void main(String[] args){ // 需求,所在位置的5公里范围内有肯德基的话,去KFC吃午饭。 // 公里数 double distance = 6.0;//单位KM // 判断语句 if(distance<=5){ System.out.println("走着去KFC吃午饭"); }else if(distance<=7.0&&distance>5){ System.out.println("跑着去KFC吃午饭"); }else{ System.out.println("在附近吃别的"); } } }
接收用户键盘输入:
/* System.out.println() 负责向控制台输出,【从内存到控制台,输出的过程,这是从内存中出来了】 接收用户键盘输入,从"键盘"到"内存"。【输入的过程,到内存汇总去】 */ public class ifTest01{ public static void main(String[] args){ // 创建键盘扫描器对象 java.util.Scanner s = new java.util.Scanner(System.in); // 第二部:调用Scanner对象的next()方法开始接收用户键盘输入 // 程序执行到这里,会停下来,等待用户输入 // 当用户输入的时候,并且最终敲回车键的时候,键入的信息会自动赋值给userInputContent // 程序执行到这里,用户输入的信息已经到内存中了 // 接收文本【以字符串的形式接收】 // String userInputContent = s.next(); // 将内存中的数据输出到控制台 // System.out.println("您输入了:"+userInputContent); // 接收数字【以整数型的形式接收】 int num = s.nextInt(); System.out.println("您输入的数字是:"+num); } }
/* if控制语句练习: 需求:假设系统给定一个人的年龄(这个年龄需要从键盘输入), 根据年龄来判断这个人处于生命的哪个阶段。年龄必须在[0-150] [0-5]幼儿 [6-10]少儿 [11-18]青少年 [19-35]青年 [36-55]中年 [56-150]老年 */ public class ifTest01{ public static void main(String[] args){ // 1、接收键盘输入:年龄【输入的时候必须输入数字】 // 创建键盘扫描器对象 java.util.Scanner s = new java.util.Scanner(System.in); // 提示信息 System.out.println("请输入您的年龄"); int age = s.nextInt();//停下来等待用户输入,回车后赋值给age,然后往下执行 System.out.println("age="+age); // 2、根据需求进行业务逻辑判断 String str = "老年"; if( age < 0 || age > 150 ){ str = "您提供的年龄不合法,年龄需要在[0-150]"; }else if(age <= 5){ str = "幼儿"; }else if(age <= 10){ str = "少儿"; }else if(age <= 18){ str = "青少年"; }else if(age <= 35){ str = "青年"; }else if(age <= 55){ str = "中年"; }else if(age <= 105){ str = "老年"; } System.out.println("您处于生命周期的"+str+"阶段"); } }
/* if控制语句练习:需求 判断当前的天气: 当外边下雨的时候: 带雨伞: 男生:带一把大黑伞 女生:带一把小黑伞 当外边晴天的时候: 判断天气的温度: 当温度在30度以上: 男生:戴墨镜 女生:搽防晒霜 提示: 1、一定要用到嵌套 2、天气状况、性别、温度都需要从键盘输入 天气状况:1表示下雨、0表示晴天 性别:1表示男、0表示女 温度直接用数字表示即可 */ public class ifTest01{ public static void main(String[] args){ java.util.Scanner s= new java.util.Scanner(System.in); System.out.println("欢迎使用本系统,您通过本系统可以完成一些简单的判断"); System.out.println("说明1:1表示男、0表示女"); System.out.println("说明2:1表示下雨、0表示晴天"); System.out.println("说明3:用数字表示温度"); // 接收性别 System.out.println("请输入性别:"); int sex = s.nextInt(); // 接收天气状况 System.out.print("请输入当前天气:"); int weather = s.nextInt(); // 判断天气状况 if(weather == 1){ // 下雨天 System.out.println("下雨天"); if(sex == 1){ System.out.println("带一把大黑伞"); }else if(sex == 0){ System.out.println("带一把小花伞"); }else{ System.out.println("请输入正确的性别"); } }else if(weather == 0){ //晴天 System.out.println("晴天"); // 接收温度 System.out.println("请输入温度:"); int tem = s.nextInt(); if(tem > 30){ if(sex == 1){ System.out.println("带墨镜"); }else if(sex == 0){ System.out.println("查防嗮爽"); }else{ System.out.println("请输入正确的性别"); } }else{ System.out.println("今天天气良好,可以自由出行"); } }else{ System.out.println("您输入的天气有误,需要输入1或者0"); }; } }
switch语句
/* 关于switch语句: 1、switch语句也属于选择结构,也属于分支语句 2、switch语句的语法结构 一个完整的switch语句应该这样编写: switch(int或String类型的字面值或变量){ case int或String类型的字面值或变量: java语句; ... break; case int或String类型的字面值或变量: java语句; ... break; default : java语句; ... }; 3、switch语句执行原理: switch后面小括号当中的"数据"和case后面的"数据",进行一一匹配,匹配成功的分支执行。 按照从上到下的顺序依次匹配。 4、匹配成功的分支执行,分支当中最后有break语句,整个switch语句终止。 5、匹配成功的分支执行,分支当中最后没有break语句的话,直接进入下一个分支执行(不进行匹配)。 这种现象被称为case穿透现象。【提供break;语句可以避免穿透】 6、所有分支如果都没有匹配成功,如果有default语句的话,会执行default分支当中的语句。 7、switch后面和case后面只能是int或String类型的数据,不能探测其它类型! *当然,byte、short、char也可以直接写到switch和case后面,因为他们可以进行自动类型转换。 byte、short、char可以自动转换为int类型。 *JDK6版本的话,switch和case后面只能探测int类型。 *JDK7以后版本包括JDK7版本,引入新特性,switch和case后面可以探测int或String类型的数据。 8、case可以合并: int i = 10; switch(i){ case 1: case 2: case 3: case 10: java语句; ... break; default: java语句; } */ public class Switch01{ public static void main(String[] agrs){ /*类型错误 long a = 100L; int b = a; */ // 和上面的报错原因相同 // long x = 100L; // switch(x){} // 解决编译错误 long x = 100L; switch((int)x){}; byte b = 10; switch(b){}; short s = 20; switch(s){}; char c = 'A'; switch(c){}; char cc = 97; switch(cc){}; // switch(true){}; 编译错误 不兼容的类型 无法转换为int String username = "张三"; switch(username){}; /* 较完整的switch语句 */ // 接收用户的输入: // 输入1:星期一 // 输入2:星期二 // ... // 输入7:星期日 java.util.Scanner o = new java.util.Scanner(System.in); System.out.print("请输入数字1-7:"); int num = o.nextInt(); switch(num){ case 1: System.out.println("星期一"); break; case 2: System.out.println("星期二"); break; case 3: System.out.println("星期三"); break; case 4: System.out.println("星期四"); break; case 5: System.out.println("星期五"); break; case 6: System.out.println("星期六"); break; case 7: System.out.println("星期日"); break; default: System.out.println("您输入的啥都不是"); } System.out.println("======================"); //case穿透 switch(num){ case 1: System.out.println("星期一"); // break; 输入1、2都会穿透到3的分支 case 2: System.out.println("星期二"); // break; 输入1、2都会穿透到3的分支 case 3: System.out.println("星期三"); break; case 4: System.out.println("星期四"); break; case 5: System.out.println("星期五"); break; case 6: System.out.println("星期六"); break; case 7: System.out.println("星期日"); break; default: System.out.println("您输入的啥都不是"); }; System.out.println("======================"); //case合并 switch(num){ case 1: case 2: case 3: case 4: case 5: System.out.println("工作日"); break; case 6: case 7: System.out.println("休息日"); break; default: System.out.println("您输入的啥都不是"); }; } }
/* switch确实可以探测String类型,这是java7的新特性。 */ public class Switch01{ public static void main(String[] agrs){ java.util.Scanner s = new java.util.Scanner(System.in); System.out.print("请输入汉字的星期几:"); String str = s.next(); switch(str){ case "星期一": System.out.println(1); break; case "星期二": System.out.println(2); break; case "星期三": System.out.println(3); break; case "星期四": System.out.println(4); break; case "星期五": System.out.println(5); break; case "星期六": System.out.println(6); break; case "星期日": System.out.println(7); break; default: System.out.println("您输入有误"); } } }
/* */ public class Switch01{ public static void main(String[] agrs){ char c = 'A'; switch(c){ case 'A': System.out.println("高级"); break; case 'B': System.out.println("中级"); break; case 'C': System.out.println("低级"); break; default: System.out.println("级别太低了"); } switch(c){ case 65://'A'对应的int类型是65 System.out.println("高级"); break; case 'B': System.out.println("中级"); break; case 'C': System.out.println("低级"); break; default: System.out.println("级别太低了"); } } }
/* 需求:实现计算机中的加、减、乘、除、取余数 实现思路: 1、选择所有数据从键盘输入 2、使用switch语句进行判断 3、需要从控制台输入三次 *第一个数字 *运算符 *第二个数字 */ public class Switch01{ public static void main(String[] agrs){ java.util.Scanner s = new java.util.Scanner(System.in); System.out.print("请输入第一个数字"); int a = s.nextInt(); System.out.print("请输入运算符"); String str = s.next(); System.out.print("请输入第二个数字"); int b = s.nextInt(); switch(str){ case "+": System.out.println(a+" + "+b+" = "+(a + b)); break; case "-": System.out.println(a+" - "+b+" = "+(a - b)); break; case "*": System.out.println(a+" * "+b+" = "+(a * b)); break; case "/": System.out.println(a+" / "+b+" = "+(a / b)); break; case "%": System.out.println(a+" % "+b+" = "+(a % b)); break; default: System.out.println("计算有误"); } } }
循环语句
for循环
/* 1、循环结构 在程序当中,总有一些需要反复的/重复执行的代码,假设没有循环结构, 那么这段需要重复执行的代码自然是需要重复编写的。代码无法得到重复 使用。所以多数变成语言都是支持训话结构的。将来把需要重复执行的代码 片段放到"循环体",再联合"计数器",共同控制这段需要重复执行的代码。 2、基本上所有的变成语言支持的循环包括三种: *for循环 *while循环 *do...while循环 3、接下来主要介绍for循环: for循环的语法结构是什么呢? for(初始化表达式;布尔表达式;更新表达式){ // 需要重复执行的代码片段【循环体:由java与语句构成】 } 4、for循环的执行过程/执行原理: 4.1:初始化表达式、布尔表达式、更新表达式都不是必须的!【但是 两个分号 是必须的】 4.2:初始化表达式最先执行,并且在整个for循环当中只执行一次。 4.3:布尔表达式的执行结构必须是true/false,不能是其它值。 4.4:for的执行过程: *先执行初始化表达式,并且该表达式只执行一次 *判断布尔表达式的执行结构是true/false: - 布尔表达式true: *执行循环体 *执行更新表达式 *判断布尔表达式的结构是true/false - 布尔表达式true: *执行循环体 *执行更新表达式 *判断布尔表达式的结构是true/false ... -布尔表达式false: *循环结束 - 布尔表达式false: *循环结束 */ public class For01{ public static void main(String[] args){ // 需求:输出数字1-10 for(int i = 1; i <= 10; i++){ System.out.println(i); }; // 死循环 // for( ; ; ){ // System.out.println("我是死循环"); // } // 需求: // 找出1-100所有奇数 // 方案1:从1开始,每次递增2,这样每一个数字一定是奇数 for(int i = 1; i<= 100; i+=2){ System.out.println(i); } // 方案2:从1开始,每次都递增1,每次判断是否为奇数,如果是再输出。 for(int i = 1; i<= 100; i++){ if((i % 2) != 0){ System.out.println(i); } } // 计算1-100所有奇数的和 int sum = 0; for(int i = 1;i <= 100; i+=2){ sum += i; } System.out.println("sum = " + sum); // for循环的嵌套使用 // 内层循环中的变量名不能和外层循环中的变量名重复 for(int i = 0; i < 10; i++){ for(int j = 0; j < 3; j++){ System.out.println(j);//0、1、2执行10遍 } } // 写一个九九乘法表 String str = ""; for(int i = 1;i < 10; i++){ str = ""; for(int j = 1;j <= i;j++){ str += (i + " * " + j + " = "+(i * j)+ "; "); } System.out.println(str); } } }
public class For01{ public static void main(String[] args){ // 编写for循环,找出1-100中所有的素数 // 素数又被称为质数,只能被1和本身整除 int count = 0;//计数 被整除的次数 int num = 0;//计数 打印的次数 System.out.println(2); for(int i = 3;i < 100;i++){ count = 0; for(int j = 1;j <= i;j++){ if(i % j == 0){ count++; } } if(count == 2){ System.out.println(i); } } // 升级版 // 编写for循环找出1-10000中所有的素数 // 要求每8个换一行输出 for(int i = 3;i < 10000;i++){ count = 0; for(int j = 1;j <= i;j++){ if(i % j == 0){ count++; } } if(count == 2){ num++; if(num % 8 == 0){ System.out.print("\n"); } System.out.print(i +" "); } } } }
public class Continue{ public static void main(String[] args){ // 打印出1-100的素数 boolean issushu = true; // 1不是素数,所以直接从2开始 for(int i = 2;i <= 100;i++){ issushu=true;//初始化一下issushu的值 for(int j = 2;j < i;j++){ if(i % j == 0){ issushu = false;//除了1和本身外能够被其它数整除,代表不是素数 break;//加上break,大大提高执行效率 } }; if(issushu){ System.out.println(i); } }; // 升级版 // 找出1-10000的素数 // 每8个换一行 int count = 0; for(int i = 2;i <= 10000;i++){ issushu=true; for(int j = 2;j < i;j++){ if(i % j == 0){ issushu = false; break; }; }; if(issushu){ System.out.print(i+" "); count++; if(count % 8 == 0){ System.out.println();//换行 } } }; } }
while循环
/* 1、while循环的语法结构: while(布尔表达式){ 循环体; } 2、while循环的执行原理: -先判断布尔表达式结果: *true: -执行循环体 -判断布尔表达式 *true: -执行循环体 -判断布尔表达式 ... *false: -循环结束 *false: -循环结束 3、while循环的循环次数: 0 ~ N次; 注意:如果while循环的循环体有可能一次都不执行 */ public class While01{ public static void main(String[] args){ // 写个死循环 // while(true){ // System.out.println("死循环"); // } // 编译器检测到死循环后面的语句永远都执行不到 编译器真牛逼 // System.out.println("死循环后面的语句"); int i = 10; int j = 3; while(i < j){ System.out.println("永远都执行不到"); } // while(i > j){//这样写虽然是死循环,但是编译器不会报错 [后面的语句执行不到],因为变量的内存空间时在运行期开辟的 // System.out.println("死循环"); // } // 编译通过 // System.out.println("在死循环后面的语句"); // while(10 > 3){//这样写 后面的语句执行不到 会编译报错 // System.out.println("死循环"); // } // System.out.println("写在死循环后面的语句执行不到,编译器会报错"); } }
/* */ public class While01{ public static void main(String[] args){ // while循环输出1-10 int i = 1; while(i <= 10){ System.out.println(i); i++; } System.out.println("------------------"); // while循环输出10-1 int j = 10; while(j > 0){ System.out.println(j--); System.out.println("--->"+j); } int k = 10; while(k >= 0){ System.out.println(--k);//输出 9到-1 } } }
dowhile循环:
/* do..while循环 1、do..while循环的语法结构: do{ 循环体; }while(布尔表达式); 2、do..while循环的执行原理: 先执行循环体,再执行判断布尔表达式,若果为假,循环结束,如果为真,再执行循环体。以此类推。 3、do..while循环的执行次数: 1-N次,也就是循环体执行一次 4、使用do..while循环的注意事项: do..while循环最终有一个分号,别丢了。 */ public class DoWhile{ public static void main(String[] args){ int i = 10; do{ System.out.println(i); }while(i > 100);//条件为假 会执行一次 System.out.println("----------------------------"); while(i > 100){//条件为假 一次都不执行 System.out.println(i); }; System.out.println("-----------------------"); int a = 1; do{ System.out.println(a); a++; }while(a <= 10); } }
控制循环的语句:
break;
/* 关于java控制语句当中的break语句: 1、break是java语言中的关键字,被翻译为"中断/折断". 2、break + ";",可以成为单独的java语句:break; 3、break语句使用在switch语句中,用来终止switch语句。 4、break语句同样可以使用在for循环中,用来终止循环。 5、break终止那个循环呢? 6、break;使用在for、while、do..while循环中,用来跳出循环,终止循环的执行。 因为当循环执行到某个条件的时候,后面的循环没必要再执行了,再执行也是耗费资源。 所以可以终止循环,这样可以提高循环的执行效率。 7、以下以for循环为例,讲解break; 8、在默认情况下,break;终止的是离他最近的循环;当然也可以指定终止某个循环, 需要给循环起名,采用这种语法:break 循环名称; */ public class DoWhile{ public static void main(String[] args){ for(int i = 0;i < 10;i++){//0,1,2,3,4这段代码打印到4就不再执行了 if(i == 5){ break; } System.out.println(i); }; // 这里的程序和for循环无关,以下程序照样执行 System.out.println("hello world"); System.out.println("------------------"); // break;终止的是当前循环,不影响外层循环 for(int j = 0;j < 3;j++){ for(int i = 0;i < 10;i++){ if(i == 5){ break; } System.out.println(i); }; }; // 在来看看以下代码 System.out.println("--------------------------"); // 以下语法使用较少,但需要会用 // 给for循环起名叫for1 for1:for(int j = 0;j < 3;j++){ // 给for循环起名叫for2 for2:for(int i = 0;i < 10;i++){ if(i == 5){ break for1;//在这里终止的是for1循环 } System.out.println(i); }; }; } }
continue:
/* continue语句: 1、continue表示:继续/go on/下一个 2、continue也是一个continue关键字加一个分号构成一个单独的完整的java语句, 出现在循环语句当中,用来控制循环的执行。 3、break和continue的区别: *break表示循环不执行了。终止循环。 *continue表示直接跳出当前"本次"循环,进入下一个循环继续执行。 4、continue也有这样的语法: continue 循环名称;【了解即可,用的不多】 */ public class Continue{ public static void main(String[] args){ // break for(int i = 0;i < 10;i++){//0、1、2、3、4 if(i == 5){ break; } System.out.println("i = "+i); }; System.out.println("-------------------------"); // continue for(int i = 0;i < 10;i++){//0、1、2、3、4、(跳过5)、6、7、8、9 if(i == 5){ continue; } System.out.println("i = "+i); }; System.out.println("-------------------------"); // continue 循环名称; for1:for(int i = 0;i < 5;i++){//总共执行4次,因为中间跳过一次 for2:for(int j = 0;j < 5;j++){ if(i == 3){ continue for1;//当i==3时,跳出for1外层的这一次循环,继续执行 }; System.out.println(i+"---"+j); } }; } }
。