day03_java的Scanner入录_分支_循环
第一章.键盘录入_Scanner
概念
1.概述:Scanner是java定义好的类
2.作用:通过键盘录入的形式将数据放到代码中参与运行
3.怎么用:
a.导包:为了找到想使用的类 -> import java.util.Scanner
b.创建对象: Scanner 对象名 = new Scanner(System.in);
c.调用方法,实现键盘录入:
对象名.nextInt() -> 录入一个整数
对象名.next() -> 录入一个字符串
案例1
public class Demo01Scanner {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请您输入一个整数:");
int data1 = sc.nextInt();
System.out.println("data1 = " + data1);
System.out.println("请您输入一个字符串:");
String data2 = sc.next();
System.out.println("data2 = " + data2);
}
}
案例2
public class Demo02Scanner {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请你输入第一个整数:");
int data1 = sc.nextInt();
System.out.println("请你输入第二个整数:");
int data2 = sc.nextInt();
System.out.println("请你输入第三个整数:");
int data3 = sc.nextInt();
int temp = (data1 > data2) ? data1 : data2;
int max = (temp > data3) ? temp : data3;
System.out.println("max = " + max);
}
}
案例3
键盘输入类型与实际接收类型不一致导致错误
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:864)
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.nextInt(Scanner.java:2117)
at java.util.Scanner.nextInt(Scanner.java:2076)
at com.atguigu.a_scanner.Demo02Scanner.main(Demo02Scanner.java:9)
next()和nextLine()区别?
next():录入字符串,遇到回车或者空格就结束录入了
nextLine():录入字符串,遇到回车就结束录入
public class Demo03Scanner {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String data1 = sc.next();
String data2 = sc.nextLine();
System.out.println(data1);
System.out.println(data2);
}
}
第二章.switch(选择语句)
1.switch基本使用
1.格式:
switch(表达式){
case 常量值1:
执行语句1;
break;
case 常量值2:
执行语句2;
break;
case 常量值3:
执行语句3;
break;
...
default:
执行语句n;
break;
}
2.执行流程:
第1步:根据switch中表达式的值,依次匹配各个case。如果表达式的值等于某个case中的常量值,则执行对应case中的执行语句。
第2步:执行完此case的执行语句以后,
情况1:如果遇到break,则执行break并跳出当前的switch-case结构
情况2:如果没有遇到break,则会继续执行当前case之后的其它case中的执行语句。--->case穿透
...
直到遇到break关键字或执行完所有的case及default的执行语句,跳出当前的switch-case结构
3.注意:
switch(表达式)中表达式的值必须是下述几种类型之一:byte,short,char,int,枚举 (jdk 5.0),String (jdk 7.0);
case子句中的值必须是常量,不能是变量名或不确定的表达式值或范围;
同一个switch语句,所有case子句中的常量不能相同;
public class Demo01Switch {
public static void main(String[] args) {
//创建Scanner对象
Scanner sc = new Scanner(System.in);
System.out.println("请你输入一个整数:");
int data = sc.nextInt();
switch (data){
case 1:
System.out.println("离离原上草");
break;
case 2:
System.out.println("一岁一枯荣");
break;
case 3:
System.out.println("野火烧不尽");
break;
case 4:
System.out.println("春风吹又生");
break;
default:
System.out.println("输入错误");
break;
}
}
}
2.case的穿透性
如果没有break,会出现case的穿透性,代码会一直往下穿透执行,直到遇到break或者switch结束了为止
public class Demo02Switch {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int month = sc.nextInt();
switch(month){
case 12:
System.out.println("冬季");
break;
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;
default:
System.out.println("输入有误!");
break;
}
}
}
public class Demo02Switch {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int month = sc.nextInt();
switch(month){
case 12:
case 1:
case 2:
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;
}
}
}
第三章.分支语句
1.if的第一种格式
1.格式:
if(boolean表达式){
执行语句
}
或者:
if(boolean表达式)
执行语句
2.执行流程:
走if后面的执行语句,如果是true,就走if后面大括号中的执行语句
否则就不走
public class Demo01If {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请你输入第一个整数:");
int data1 = sc.nextInt();
System.out.println("请您输入第二个整数:");
int data2 = sc.nextInt();
if (data1==data2){
System.out.println("相等");
}
/*if (data1==data2)
System.out.println("相等");*/
}
}
2.if的第二种格式
1.格式:
if(boolean表达式){
执行语句1
}else{
执行语句2
}
2.执行流程:
先走if后面的boolean表达式,如果是true,就走if后面的执行语句1
否则就走else后面的执行语句2
public class Demo02If {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请你输入第一个整数:");
int data1 = sc.nextInt();
System.out.println("请您输入第二个整数:");
int data2 = sc.nextInt();
if (data1==data2){
System.out.println("相等");
}else{
System.out.println("不相等");
}
/*if (data1==data2)
System.out.println("相等");
else
System.out.println("不相等");*/
}
}
2.1 练习
任意给出一个整数,请用程序实现判断该整数是奇数还是偶数,并在控制台输出该整数是奇数还是偶数
public class Demo03If {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请你输入一个整数:");
int data = sc.nextInt();
if (data%2==0){
System.out.println("偶数");
}else{
System.out.println("奇数");
}
}
}
2.2练习
需求.利用if else 求出两个数的较大值
public class Demo04If {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请你输入第一个整数:");
int data1 = sc.nextInt();
System.out.println("请你输入第二个整数:");
int data2 = sc.nextInt();
if (data1>data2){
System.out.println(data1);
}else {
System.out.println(data2);
}
}
}
public class Demo05If {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请你输入第一个整数:");
int data1 = sc.nextInt();
System.out.println("请你输入第二个整数:");
int data2 = sc.nextInt();
System.out.println("请你输入第三个整数:");
int data3 = sc.nextInt();
int temp = 0;
if (data1>data2){
temp = data1;
}else{
temp = data2;
}
if (temp>data3){
System.out.println(temp);
}else{
System.out.println(data3);
}
}
}
2.3练习
案例:从键盘输入年份,请输出该年的2月份的总天数。闰年2月份29天,平年28天。
闰年:
a.能被4整除,但是不能被100整除
b.或者能直接被400整除
public class Demo06If {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请你输入一个年份:");
int year = sc.nextInt();
/*
a.能被4整除,但是不能被100整除
b.或者能直接被400整除
*/
if ((year%4==0 && year%100!=0) || (year%400==0)){
System.out.println("闰年2月有29天");
}else{
System.out.println("平年2月有28天");
}
}
}
2.4练习
public class Demo07IfElse {
public static void main(String[] args) {
boolean num1 = false;
boolean num2 = true;
int i = 1;
/*
num2为true
将num2的值赋值给了num1,num1由false变成true
*/
if (num1=num2){
i++;
System.out.println(i);//2
}
if (false){
--i;
System.out.println(i);
}
}
}
3.if的第三种格式
1.格式:
if(boolean表达式){
执行语句1;
}else if(boolean表达式){
执行语句2;
}else if(boolean表达式){
执行语句2;
}else if(boolean表达式){
执行语句2;
}...else{
执行语句n
}
2.执行流程:
a.先走if后面的boolean表达式,如果是true,就走if对应的执行语句1
b.否则就走下面的else if,如果是true,就走else if对应的执行语句2
c.否则就继续走下面的else if,以上所有判断都不成立,就走else对应的执行语句
public class Demo08If {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请您输入第一个整数:");
int data1 = sc.nextInt();
System.out.println("请您输入第二个整数:");
int data2 = sc.nextInt();
/*if (data1>data2){
System.out.println("data1大于data2");
}else if(data1<data2){
System.out.println("data1小于data2");
}else{
System.out.println("data1等于data2");
}*/
if (data1>data2){
System.out.println("data1大于data2");
}else if(data1<data2){
System.out.println("data1小于data2");
}else if (data1==data2){
System.out.println("data1等于data2");
}
}
}
3.1.练习
需求:
键盘录入一个星期数(1,2,...7),输出对应的星期一,星期二,...星期日
输入 1 输出 星期一
输入 2 输出 星期二
输入 3 输出 星期三
输入 4 输出 星期四
输入 5 输出 星期五
输入 6 输出 星期六
输入 7 输出 星期日
输入 其它数字 输出 数字有误
public class Demo09If {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请您输入一个数:");
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("周日");
}else{
System.out.println("输入有误!");
}*/
if (week<1 || week>7){
System.out.println("输入有误");
}else{
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("周日");
}
}
}
}
3.2练习
- 需求: 小明快要期末考试了,小明爸爸对他说,会根据他不同的考试成绩,送他不同的礼物,假如你可以控制小明的得分,请用程序实现小明到底该获得什么样的礼物,并在控制台输出。
- 奖励规则:
95~100 山地自行车一辆
90~94 游乐场玩一次
80~89 变形金刚玩具一个
80以下 胖揍一顿
public class Demo10If {
public static void main(String[] args) {
//95~100 山地自行车一辆
//90~94 游乐场玩一次
//80~89 变形金刚玩具一个
//80以下 胖揍一顿
Scanner sc = new Scanner(System.in);
int score = sc.nextInt();
/*if (score>=95 && score<=100){
System.out.println("山地自行车一辆");
}else if (score>=90 && score<=94){
System.out.println("游乐场玩一次");
}else if(score>=80 && score<=89){
System.out.println("变形金刚一个");
}else if (score>=0 && score<80){
System.out.println("胖揍一顿");
}else{
System.out.println("弄死你呀,一共就100分,还给我考冒了");
}*/
if (score<0 || score>100){
System.out.println("弄死你呀,一共就100分,还给我考冒了");
}else{
if (score>=95 && score<=100){
System.out.println("山地自行车一辆");
}else if (score>=90 && score<=94){
System.out.println("游乐场玩一次");
}else if(score>=80 && score<=89){
System.out.println("变形金刚一个");
}else if (score>=0 && score<80){
System.out.println("胖揍一顿");
}
}
}
}
从效率上来说,switch比if要快
if是从上到下挨个判断
switch直接跳到相匹配的位置
但是开发中if用的多,因为用起来比较灵活
第四章.循环语句
1.for循环
1.格式:
for(初始化变量;比较;步进表达式){
循环语句
}
2.执行流程:
a.先走初始化变量
b.比较,如果是true,走循环语句,走步进表达式
c.再比较,如果还是true,继续走循环语句,再走步进表达式
d.再比较,直到比较为false,循环结束
public class Demo01For {
public static void main(String[] args) {
for (int i = 0;i<5;i++){
System.out.println("我爱java");
}
}
}
1.1练习
for循环:求1-3之间的数据和,并把求和结果输出到控制台上
1+2+3
步骤:
1.定义一个变量sum,用于接收两个数相加之和
2.利用for循环1 2 3表示出来
3.在循环体中做运算,两两相加,结果赋值给sum
4.输出sum
public class Demo02For {
public static void main(String[] args) {
//1.定义一个变量sum,用于接收两个数相加之和
int sum = 0;
//2.利用for循环1 2 3表示出来
for (int i = 1;i<=3;i++){
//3.在循环体中做运算,两两相加,结果赋值给sum
sum+=i;//sum = sum+i;
}
//4.输出sum
System.out.println("sum = " + sum);
}
}
1.2练习
需求:求出1-100的偶数和
步骤:
1.定义一个变量sum,接收两个数的和
2.利用for循环将1-100的数表述出来
3.在循环体中判断,如果是偶数-> 相加,将结果赋值给sum
4.输出sum
public class Demo03For {
public static void main(String[] args) {
//1.定义一个变量sum,接收两个数的和
int sum = 0;
//2.利用for循环将1-100的数表述出来
for (int i = 1;i<=100;i++){
//3.在循环体中判断,如果是偶数-> 相加,将结果赋值给sum
if (i%2==0){
sum+=i;
}
}
//4.输出sum
System.out.println("sum = " + sum);
}
}
1.3练习
统计一下1-100之间的偶数个数
步骤:
1.定义一个变量count,计数
2.利用for循环将1-100的数表述出来
3.在循环体中判断,如果是偶数-> count++
4.输出count
public class Demo04For {
public static void main(String[] args) {
//1.定义一个变量count,计数
int count = 0;
//2.利用for循环将1-100的数表述出来
for (int i = 1;i<=100;i++){
//3.在循环体中判断,如果是偶数-> count++
if (i%2==0){
count++;
}
}
//4.输出count
System.out.println("count = " + count);
}
}
快速生成for循环快捷键:
次数.fori
2.while循环
1.格式:
初始化变量;
while(比较){
循环语句
步进表达式
}
2.执行流程:
a.初始化变量
b.比较,如果是true,执行循环语句,走步进表达式
c.再比较,如果还是true,继续循环,走步进表达式
d.再比较,直到比较为false,循环结束
案例1
public class Demo01While {
public static void main(String[] args) {
int i = 0;
while(i<5){
System.out.println("我爱java");
i++;
}
}
}
案例2
public class Demo02While {
public static void main(String[] args) {
int sum = 0;
int i = 1;
while(i<=100){
sum+=i;
i++;
}
System.out.println("sum = " + sum);
}
}
案例3
public class Demo03While {
public static void main(String[] args) {
int sum = 0;
int i = 1;
while (i <= 100) {
if (i % 2 == 0) {
sum += i;
}
i++;
}
System.out.println("sum = " + sum);
}
}
案例4
public class Demo04While {
public static void main(String[] args) {
int count = 0;
int i = 1;
while (i <= 100) {
if (i % 2 == 0) {
count++;
}
i++;
}
System.out.println("count = " + count);
}
}