21.Scanner使用的基本步骤
(1)导包
导包的动作必须出现在类定义的上面
import java.util.Scanner;
(2)创建对象
下面这个格式里面,只有sc是变量名,可以变。其他的都不允许变
Scanner sc = new Scanner(System.in);
(3)接收数据
下面这个格式里面,只有i是变量名,可以变,其他的都不允许变
int i = sc.nextInt();
import java.util.Scanner;
public class test1 {
public static void main(String[] args) {
//创建对象
Scanner sc = new Scanner(System.in);
//接受数据
int i = sc.nextInt();
//输出数据
System.out.println("i:"+i);
}
}//输入数据 4 输出:i=4
案例:三个和尚升级版
三个和尚身高必须经过测量得出,请用程序实现获取这三个和尚的最高身高
分析:
(1)身高未知,采用键盘录入实现,首先导包,然后创建对象
import java.util.Scanner;
Scanner sc =new Scanner(System.in);
(2)键盘录入三个身高分别赋值给三个变量
int height1 =sc.nextInt();
int height2 =sc.nextInt();
int height3 =sc.nextInt();
(3)用三元运算符获取前两个和尚的较高身高值,并用临时身高变量保存起来
(height1>height2)?height1:height2;
(4)用三元运算符获取临时身高值和第三个和尚身高较高值,并用最大身高变量保存
(tempHeight>height3)?tempHeight:height3;
(5)输出结果
import java.util.Scanner;
public class test1 {
public static void main(String[] args) {
Scanner sc =new Scanner(System.in);
//(1102)键盘录入三个身高分别赋值给三个变量
System.out.println("请输入第一个和尚身高");
int height1 =sc.nextInt();
System.out.println("请输入第二个和尚身高");
int height2 =sc.nextInt();
System.out.println("请输入第三个和尚身高");
int height3 =sc.nextInt();
//(3)用三元运算符获取前两个和尚的较高身高值,并用临时身高变量保存起来
int tempHeight =(height1>height2)?height1:height2;
//(4)用三元运算符获取临时身高值和第三个和尚身高较高值,并用最大身高变量保存
int maxHeight =(tempHeight>height3)?tempHeight:height3;
//(5)输出结果
System.out.println("这三个和尚中身高最高的是:"+ maxHeight);
}
}//输入110 111 112 输出:这三个和尚中身高最高的是:112
22.流程控制
顺序结构
顺序结构是程序中最简单最基本的流程控制,,没有特定的语法结构,按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行的
分支结构(if ,switch)
if语句格式1
格式:
if(关系表达式){
语句体;
}
执行流程
1.首先计算关系表达式的值
2.如果关系表达式的值为true就执行语句体
3.如果关系表达式的值为false就不执行语句体
4.继续执行后面的语句内容
//定义两个变量
int a = 10;
int b = 20;
//需求:判断a和b的值是否相等,如果相等,就在控制台输出:a等于b
if(a==b){
System.out.println("a等于b");
}
//需求:判断a和b的值是否相等,如果相等,就在控制台输出:a等于c
int c =10;
if(a==c){
System.out.println("a等于c");
}
System.out.println("结束");
//输出:a等于c
//结束
if语句格式2
if(关系表达式){
语句体1;
}else{
语句体2;
}
执行流程
1.首先计算关系表达式的值
2.如果关系表达式的值为true就执行语句体1
3.如果关系表达式的值为false 就执行语句体2
4.继续执行后面的语句内容
int a = 10;
int b = 20;
b = 5 ;
//需求:判断a是否大于b,如果是,在控制台输出:a的值大于b,如果不是,在控制台输出:a的值不大于b
if(a>b){
System.out.println("a的值大于b");
} else {
System.out.println("a的值不大于b");
}
System.out.println("结束");
//输出:a的值大于b
// 结束
案例: 奇偶数
需求:任意给出一个整数,请用程序实现判断该整数是奇数还是偶数,并在控制台输出该整数是奇数还是偶数
分析:
(1)为了体现任意给出的整数,采用键盘录入一个数据
(2)判断整数是偶数还是奇数还要分两种情况进行判断,使用if..else 结构
(3)判断是否偶数需要使用取余运算符实现该功能number%2==0
if(number % 2 ==0){
} else {
}
(4)根据判定情况,在控制台输出对应的内容
if(number % 2 ==0){
System.out.printIn(number + "是偶数");
} else {
System.out.printIn(number + "是奇数");
}
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个整数:");
int number = sc.nextInt();
if(number%2==0){
System.out.println(number + "是偶数");
} else {
System.out.println(number + "是奇数");
}//输入:9 输出:9是奇数
if语句格式3
格式:
if(关系表达式1){
语句体1;
} else if (关系表达式2){
语句体2;
}
...
else{
语句体n+1;
}
执行流程:
(1)首先计算关系表达式1的值
(2)如果值为true就之行语句体1;如果值为false就计算关系表达式2的值
(3)如果值为true就执行语句体2;如果值为false就计算关系表达式3的值
(4)...
(5)如果没有任何关系表达式为true,就执行语句体n+1
System.out.println("开始");
//需求:键盘录入一个星期数(1,2,...7),输出对应的星期一,星期二,...星期日
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个星期数(1-7)");
int week = sc.nextInt();
if(week ==1){
System.out.println("星期一");
} else if(week == 2){
System.out.println("星期二");
}else if(week == 3){
System.out.println("星期三");
}else if(week == 4){
System.out.println("星期四");
}else if(week == 5){
System.out.println("星期五");
}else if(week == 6){
System.out.println("星期六");
}else if(week == 7){
System.out.println("星期七");
}
System.out.println("结束");
案例:考试奖励
需求:小明快要考试了,小明爸爸对他说,会根据他不同的考试成绩,送给他不同的生日礼物,假如你可以控制小明的得分,请用程序实现小明到底应该获得什么样的礼物,并在控制台输出
分析:
(1)小明的考试未知,可以使用键盘录入的方式获取值
使用键盘录入功能需要导包,创建数据,接收数据
(2)由于奖励过多,属于多种判断,采用(if ...else)
(3)为每种判断设置对应的条件
if(score ≥ 95 &&score ≤ 100) {
}else if (score ≥ 90 && score ≤ 94){
}else if (score ≥ 80 && score ≤ 89){
}else{
}
(4)为每种判断设置对应奖励
System.out.println("悟2无人机");
System.out.println("Magic 3 pro 无人机");
System.out.println("fpv 穿越机");
System.out.println("mini 3 pro 无人机");
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个分数");
int score = sc.nextInt();
//数据测试: 正确数据,边界数据,错误数据
if(score>100||score<0){
System.out.println("你输入了一个错误的分数");
}else if(score>=95&&score<=100){
System.out.println("悟2无人机");
}else if(score>=90&&score<=94){
System.out.println("Magic 3 pro 无人机");
}else if(score>=80&&score<=89) {
System.out.println("fpv 穿越机");
}else {
System.out.println("mini 3 pro 无人机");
}
switch语句
格式:
switch(表达式){
case 值1:
语句体1;
break;
case 值2:语句体2;
break;
...
default:
语句体n+1;
[break;]
}
格式说明:
表达式:取值为byte,short,int,char,JDK5以后可以是枚举,JDK7以后可以是String
case:后面跟的是要和表达式进行比较的值
break:表示中断,结束的意思,用来结束switch语句
default:表示所有情况都不匹配的时候,就执行该处的语句,和if语句的else相似
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个星期数(1-7)");
int week = sc.nextInt();
switch(week) {
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("你输入的是什么东西!");
break;
}
System.out.println("结束");
案例:春夏秋冬
需求:一年有12个月,分别属于春夏秋冬四个季节,键盘录入一个部分,请用程序实现判断改月份属于哪个季节,并输出
分析:
(1)键盘录入月份数据,使用变量接收
(2)多情况判断,这里采用switch语句实现
switch(month){
case X:
case X:
case X:
default:
}
(3)在每种情况中,完成输出对应的季节(选择了几个)
case 3:
System.out.printIn("春季");
break;
//方式1
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个月份(1-12)");
int week = sc.nextInt();
switch(week) {
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;
case 8:
System.out.println("夏季");
break;
case 9:
System.out.println("秋季");
break;
case 10:
System.out.println("秋季");
break;
case 11:
System.out.println("秋季");
break;
case 12:
System.out.println("冬季");
break;
default:
System.out.println("你输入的什么东西");
break;
}
System.out.println("结束");
注意事项:在switch语句中,如果case控制的语句体后面不写break,将出现穿透现象,在不判断下一个case值的情况下,向下运行,直到遇见break,或者整体switch结束
//方式2 case穿透
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个月份(1-12)");
int week = sc.nextInt();
switch(week) {
case 1:
case 2:
case 12:
System.out.println("冬季");
break;
case 3:
case 4:
case 5:
System.out.println("春季");
break;
case 6:
case 7:
case 8:
System.out.println("夏季");
break;
case 9:
case 10:
case 11:
System.out.println("秋季");
break;
default:+
System.out.println("你输入的什么东西");
break;
}
循环结构(for,while,do...while)
循环结构的组成:
初始化语句:用于表示循环开启时的其实状态,简单来说就是循环开始的时候怎么样
条件判断语句:用于表示反复循环的反复执行的条件,简单来说就是判断循环是否能一直执行下去
循环体语句:用于表示循环反复执行的内容,简单来说就是循环反复执行的事情
条件控制语句:用于表示循环执行中每次变化的内容,简单来说就是控制循环是否能执行下去
循环结构对应的语法:
初始化语句:这里可以是一条或者多条语句,这些语句可以完成一些初始化操作
条件判断语句:这里使用一个结果值为boolean类型的表达式,这个表达式能决定是否执行循环体。例如:a<3
循环体语句:这里可以使任意语句,这些语句将反复执行
条件控制语句:这里通常是使用一条语句来改变变量的值,从而达到控制循环是否继续向下执行的效果。常见i++,i- -这样的操作
for循环语句
格式:
foe(初始化语句;条件判断语句;条件控制语句){
循环体语句;
}
执行流程:
(1)执行初始化语句
(2)执行条件判断语句,看其结果是true还是false
如果是false,循环结束
如果是true,继续执行
(3)执行循环体语句
(4)执行条件控制语句
(5)回到(2)继续
for(int i=1;i<=5;i++) {
System.out.println("Hellow world");
}
案例:输出数据
需求:在控制台输出1-5和5-1的数据
分析:
(1)反复进行输出的动作,使用循环结构
(2)从1开始到5结束,设置初始化从1开始
(3)从1开始到5结束,设置判断条件为没有到5的时候继续执行,执行超过5程序结束
(4)从1到5,每次增加1,设置条件控制每次+1
(5)将反复进行的事情写入循环结构的内部,打印对应的数据
for(int i =1;i<=5;i++){
System.out.println(i);
}
for(int i =5;i>=1;i--){
System.out.println(i);
}
案例:求和
需求:求1-5的数据和,并把求和结果在控制台输出
分析:
求和的最终结果必须保存起来,需要定义变量,用于保存求和的结果,初始为0
int sun = 0;
从1开始到5结束,使用循环结构完成
for(int i = ii≤5li++){
}
将反复进行的事情写入循环,此处反复进行的事情是将数据i加到用于保存最终求和的变量sum中
for (int i =1; i≤ 5; i++){
sum +=i;
}
当循环执行完毕时,将最终数据打印出来
System.out.printIn("1-5之间的数据和是:"+ sum);
int sum =0;
for(int i =1;i<=5;i++){
sum += i;
/*sum += i; sum = sum + i;
第一次:sum = sum +i =0 +1 =1;
第二次:sum = sum +i = 1+2 =3;
第三次:sum = sum +i = 3 + 3 = 6;
第四次:sum = sum + i = 6 + 4 = 10;
第五次:sum = sum + i = 10 + 5 = 15;
*/
}
//当数据执行完毕时,将最终结果打印出来
System.out.println("1-5之间的数据和是:"+ sum);
}
案例:求偶数和
需求:秋1-100之间的偶数和,并把求和结果在控制台输出
分析:
对1-100的数据求和与1-5的数据求和几乎完全一样,仅仅是结束条件不同
对1-100的偶数求和,需要对求和操作添加限制条件
int sum = 0;
for(int i = 1; i≤100; i++){
if(执行的限制条件){
sum +=i;
}
}
限制条件是偶数才参与运算,因此条件应该是判断是否是偶数
int sum = 0;
for(int i = 1;i≤ 100; i++) {
if(i % 2 ==0){
sum +=i;
}
}
当循环执行完毕时,将最终数据打印出来
System.out.printIn("1-100之间的欧式和是:" + sum );
int sum =0;
for(int i = 1;i<=100;i++){
if(i%2==0){
sum += i;
}
}
System.out.println("1-100之间的偶数和是:" + sum);
//输出: 1-100之间的偶数和是:2550
案例:水仙花
需求:在控制台输出所有的"水仙花数"
什么是"水仙花数"?
水仙花数是一个三位数
水仙花数的个位,十位,百位的数字立方和等于原数
分析:
三位数的个位数字如何求
371 1就是原数数字对10进行取余计算的结果 371 % 10 = 1
三位数的百威数字如何求
371 3就是原始数字除以100的结果(整除) 371 / 100 = 3
三位数的十位数字如何求
371 371 除以10,可以将7移动到个位上(整数) 371 / 10 = 37
37通过对10进行取余运算可以得到最后以为的值7 37 % 10 = 7
思考:任意数字的指定位上的数值如何求
先使用整除操作将要求的数字移动到个位上,再使用取余操作去除最后一位上的值
分析:
输出所有的水仙花必然要使用到循环,遍历所有的三位数,三位数从100开始,到999结束
for(int i = 100; i≤999;i++){ ...... }
不是每个三位数都是水仙花数,因此需要判定,满族条件的数字才进行输出
if(执行的限制条件){ ..... }
判定条件是将三位数中的每一个数值取出来,计算立方和后与原始数字比较是否相等
if( ? + ? + ? == 原数 ) { 输出原数 }
在计算之前获取三位数中每个位上的值
int a = 原数的个位;
int b = 原数的十位;
int c = 原数的百位;
if (aaa + bbb + ccc == 原数){
输出原数
}
综合分析:
先建立循环
取出三位数中的个位十位百位数字
计算是否满足条件,满足条件输出
for(int i =100;i<1000;i++){
int ge = i%10;
int shi = i/10%10;
int bai = i/10/10%10;
if(ge*ge*ge + shi*shi*shi + bai*bai*bai ==i){
System.out.println(i);
}
}
//输出:
//153
//370
//371
//407
案例:统计
需求:统计"水仙花数"一共有多少个,并在控制台输出个数
分析:
定义count , 用于保存"水仙花数"的数量,初始值为0、
int count = 0;
判定水仙花数的过程中,满族条件不再输出,更改为修改count的值,使count+1
if(aaa + bbb + ccc == 原数) {
count++;
}
打印输出最终结果
System.out.printIn("水仙花共有:" +count+ "个");
int count =0;
for(int i = 100; i<1000;i++){
int ge = i%10;
int shi = i/10%10;
int bai = i/10/10%10;
if(ge*ge*ge + shi*shi*shi +bai*bai*bai == i){
count++;
}
}
System.out.println("水仙花共有" + count +"个");
//输出:水仙花共有4个