## 一 键盘录入的基本格式
我们在初始使用Java阶段发现给的值都是给死的,不灵活,而我们为了让程序的数据更符合开发的数据,这时候我们就需要用键盘录入来实现它。 下来,我们说一下键盘录入的基本格式。
1 导包
格式:
import java.util.Scanner;
位置:
在class上面。
2 创建键盘录入对象
格式:
Scanner sc = new Scanner(System.in);
3 通过对象获取数据
格式:
int x = sc.nextInt();
在IDEA中实际演示如下:
```java
import java.util.Scanner;
public class Mydemo1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个整数");
int i = sc.nextInt();
}
}
```
我们也可以做一些键盘录入的案例来演示一下,例如比较三个数据的最大值:
```java
import java.util.Scanner;
public class Mydemo1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入你要比较的数");
int i = sc.nextInt();
Scanner sc1 = new Scanner(System.in);
System.out.println("请输入你要比较的数");
int j= sc.nextInt();
Scanner sc2 = new Scanner(System.in);
System.out.println("请输入你要比较的数");
int a = sc.nextInt();
int max= (i>j)?i:j;
int max1=(max>a)?max:a;
System.out.println("三个数的最大值是"+max1);
}
```
## 二 流程控制语句
### 1 顺序结构语句
1 在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的。也就是说,程序的流程对运行结果 有直接的影响。所以,我们必须清楚每条语句的执行流程。而且,很多时候我们要通过控制语句的执行顺序来实现 我们要完成的功能。
2 流程控制语句分为 顺序结构 选择结构和循环结构三种
3 我们首先来了解的顺序结构语句是程序中最简单的最基本的流程控制,没有特定的语法结构
通俗来说 就是前面的先执行,后面的后执行 从上往下 依次执行
![顺序结构语句流程图](https://img-blog.csdnimg.cn/2019121018343723.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NoaW9uYWdp,size_16,color_FFFFFF,t_70)
### 2 选择结构语句
选择结构 也被称为分支结构,不同于顺序结构而言,选择结构有特定的语法规则,代码要执行具体的逻辑运算进行判断,逻辑运算的结果有两个,所以产生选择,按照不同的选择执行不同的代码。
选择结构分为if语句和switch语句两种
#### (1)我们首先来谈if语句
1 if 语句的三种格式
(1)if(比较表达式或者是boolean类型的值){
语句体;
}
执行流程:
先计算表达式中的值,看看返回的值是true还是false,如果是true,就执行语句体,如果是false,就不执行。
我们来演示一下
```java
public class Mydemo1 {
public static void main(String[] args) {
if(2>1){
System.out.println("语句体运行了");
}
}
}
```
(2)if(比较表达式){
语句体1;
}else{
语句体2;
}
注意事项:else后面没有表达式,只有if后面有。
执行流程:
先计算表达式中的值,看看返回的值是true还是false,如果是true,就执行语句体1,如果是false,就执行语句体2。
我们来演示一下
```java
public class Mydemo1 {
public static void main(String[] args) {
if(2>1){
System.out.println("语句体1运行了");
}
else{
System.out.println("语句体2运行了");
}
}
}
```
我们也可以结合上面的键盘录入来判断一个数是奇数还是偶数
```java
public class Mydemo1 {
public static void main(String[] args) {
Scanner scanner1 = new Scanner(System.in);
System.out.println("请输入一个数字");
int i = scanner1.nextInt();
if(i%2==0){
System.out.println("这个数字是偶数");
}
else{
System.out.println("这个数字是奇数");
}
}
}
```
(3)if(比较表达式1) {
语句体1;
}else if(比较表达式2) {
语句体2;
}else if(比较表达式3) {
语句体3;
}
...
else {
语句体n+1;
}
2 执行流程:
先计算比较表达式1中的值,看看返回的值是true还是false,如果是true,就执行语句体1,if语句结束。如果是false,就接着计算比较表达式2看其返回值是true还是false,如果是true,就执行比较表达式2,if语句结束。如果是false,就接着计算比较表达式3看其返回值是true还是false,就这样一直循环,如果都是false ,就执行语句体 n+1。
注意事项:当只有一个条件满足时,if语句结束。else是可以省略,但是不建议省略。
我们通过一个案例来演示一下
键盘录入一个成绩并判断出输出成绩的等级
90-100优秀
70-90 良好
60-70 及格
0-60 不及格
```java
public class Mydemo1 {
public static void main(String[] args) {
Scanner scanner1 = new Scanner(System.in);
System.out.println("请输入你的成绩");
int i = scanner1.nextInt();
if(i>=90&&i<=100){
System.out.println("优秀");
}
else if(i>=70&&i<90){
System.out.println("良好");
}
else if(i>=60&&i<70){
System.out.println("及格");
}
else if(i>=0&&i<60){
System.out.println("不及格");
}
else{
System.out.println("你输入的成绩有误");
}
}
}
```
3 if语句的嵌套使用
我们在遇到一些问题的时候 ,有时候一次比较并不能获取想得要的效果,这时候我们可以嵌套使用if来得到预期的效果,我们通过一个案例来演示一下
获取三个数据中的最大值
```java
public class Mydemo1 {
public static void main(String[] args) {
Scanner scanner1 = new Scanner(System.in);
System.out.println("请输入需要比较的数字1");
double i= scanner1.nextDouble();
Scanner scanner2 = new Scanner(System.in);
System.out.println("请输入需要比较的数字2");
double j =scanner2.nextDouble();
Scanner scanner3 = new Scanner(System.in);
System.out.println("请输入需要比较的数字3");
double a = scanner3.nextDouble();
double max;double max1;
if(i>j){
max=i;
}else{
max=j;
}
if(max>a){
max1=max;
}else{
max1=a;
}
System.out.println("这三个数的最大值是"+max1);
}
}
```
4 if语句使用时的注意事项
(1)比较表达式无论简单还是复杂,结果必须是boolean类型
(2)if语句控制的语句体如果是一条语句,大括号可以省略;如果是多条语句,就不能省略。建议永远不要省略。
(3)一般来说:有左大括号就没有分号,有分号就没有左大括号
#### (2)switch结构语句
1 首先,我们了解一下switch语句的格式:
switch(表达式){
case 值1:
语句体1;
break;
case 值2:
语句体2;
break;
case 值3:
语句体3;
break;
....
default:
语句体n+1;
break;
}
2 对switch语句的格式加以解释
(1):switch表示这是switch语句
表达式的取值:byte,short,int,char
JDK5以后可以是枚举(什么是枚举,以后再讲)
JDK7以后可以是String
(2):case后面跟的是要和表达式进行比较的值
(3):语句体部分可以是一条或多条语句
(4):break表示中断,结束的意思,可以结束switch语句
(5):default语句表示所有情况都不匹配的时候,就执行该处的内容,和if语句的else相似
3 switch语句的执行流程:
先计算表达式的值,然后和case后面的匹配,如果匹配成功就执行对应语句,遇到break就会结束,否则执行default控制的语句
4 在面试的时候 也有一些关于switch表达式取值的问题
比如 byte,long,String 可以作为switch的表达式吗?
switch的数据类型跟版本是有关系的:在Java 5以前,switch(expr)中,expr只能是byte、short、char、int;从Java 5开始,Java中引入了枚举类型,expr也可以是enum类型;从Java 7开始,expr还可以是字符串(String),但是长整型(long)在目前所有的版本中都是不可以的。
5 switch语句的基本使用
我们用一个案例来了解一下
```java
public class Mydemo1 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入今天是这周的第几天");
int i = scanner.nextInt();
switch (i){
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;
}
}
}
```
6 switch语句的注意事项
(1):case后面只能是常量,不能是变量,而且,多个case后面的值不能出现相同的值
(2):default可以省略吗?
可以省略,但是不建议,因为它的作用是对不正确的情况给出提示。
(3):break可以省略吗?
可以省略,但是结果可能不是我们想要的。
会出现一个现象:case穿透。
最终我们建议不要省略
(4):default一定要在最后吗?
不是,可以在任意位置。但是建议在最后。
(5):switch语句的结束条件
a:遇到break就结束了
b:执行到末尾就结束了
#### (3)if语句和switch语句的区别
我们通过一个案列来演示一下
分别用switch语句和if语句来实验键盘录入月份然后输出对应的季节
switch语句的演示如下
```java
package org.westos.zz;
import java.util.Scanner;
public class Mydemo1 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入月份");
int i = scanner.nextInt();
switch (i){
case 1:
System.out.println("Winter");break;
case 2:
System.out.println("Winter");break;
case 3:
System.out.println("Spring");break;
case 4:
System.out.println("Spring");break;
case 5:
System.out.println("Spring");break;
case 6:
System.out.println("Summer");break;
case 7:
System.out.println("Summer");break;
case 8:
System.out.println("Summer");break;
case 9:
System.out.println("Fall");break;
case 10:
System.out.println("Fall");break;
case 11:
System.out.println("Fall");break;
case 12:
System.out.println("Winter");break;
default:
System.out.println("你输入的值有误");break;
}
}
}
```
if语句的演示如下
```java
package org.westos.zz;
import java.util.Scanner;
public class Mydemo1 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入月份,范围1-12");
int i = scanner.nextInt();
if(i==12||i==1||i==2){
System.out.println("Winter");
}
else if(i==3||i==4||i==5){
System.out.println("Spring");
}
else if(i==6||i==7||i==8){
System.out.println("Summer");
}
else if(i==9||i==10||i==11){
System.out.println("fall");
}else {
System.out.println("你输入的值不在范围内");
}
}
}
```
什么时候我们需要用if语句,什么时候我们需要用switch语句呢?
if语句使用场景:
针对结果是boolean类型的判断
针对一个范围的判断
针对几个常量值的判断
switch语句使用场景:
针对几个常量值的判断
### 3 循环结构语句
在我们使用代码来达到预期效果的时候,有时候一些代码需要重复利用,如果我们使用顺序结构语句,也可以,但是会很繁琐,特别如果代码是上万行,特别麻烦,这时候我们可以考虑让这段代码反复执行,这段被重复执行的代码就叫做循环语句体,这个语句,就叫做循环结构语句。
循环结构语句主要分为 for循环和while循环两种
#### (1)for循环
1 for循环的格式
for(初始化表达式语句;判断条件语句;控制条件语句) {
循环体语句;
}
2 for循环的执行流程
(1):执行初始化表达式语句
(2):执行判断条件语句,看其返回值是true还是false
如果是true,就继续执行
如果是false,就结束循环
(3):执行循环体语句;
(4):执行控制条件语句
(5):回到B继续。
3 注意事项:
(1)初始化表达式语句只执行一次
(2)判断条件语句无论简单还是复杂结果是boolean类型。
(3)循环体语句如果是一条语句,大括号可以省略;如果是多条语句,大括号不能省略。建议永远不要省略。
(4)一般来说:有左大括号就没有分号,有分号就没有左大括号
4 我们通过几个案例演示一下for循环语句的获取数据
(1)控制台输出数据1-10
```java
public class Mydemo1 {
public static void main(String[] args) {
for (int i = 1; i <= 10; i++) {
System.out.println(i);
}
}
}
```
(2)控制台输出数据10-1
```java
public class Mydemo1 {
public static void main(String[] args) {
for (int i = 10; i >0; i--) {
System.out.println(i);
}
}
}
```
5 我们通过几个案例来演示一下for语句的求和思想
(1)求出1-10之间数据的和
```java
public class Mydemo1 {
public static void main(String[] args) {
int sum=0;
for (int i = 1; i <=10; i++) {
sum+=i;
}
System.out.println(sum);
}
}
```
(2)求出1-100的偶数和`
```java
public class Mydemo1 {
public static void main(String[] args) {
int sum=0;
for (int i = 1; i <=100; i++) {
if(i%2==0) {
sum += i;
}
}
System.out.println(sum);
}
}
```
(3)求出1-100的奇数和
```java
public class Mydemo1 {
public static void main(String[] args) {
int sum=0;
for (int i = 1; i <=100; i++) {
if(i%2!=0) {
sum += i;
}
}
System.out.println(sum);
}
}
```
6 如何用for循环来求水仙花数并且如何统计水仙花数出现的次数
```java
package org.westos.zz;
import java.util.Scanner;
public class Mydemo1 {
public static void main(String[] args) {
int j=0;
for (int i = 100; i < 1000; i++) {
int i1=(i/10/10%10);
int i2=(i/10%10);
int i3=(i%10);
if(i1*i1*i1+i2*i2*i2+i3*i3*i3==i){
j++;
System.out.println("水仙花数有"+i);
}
} System.out.println("共有"+j+"个水仙花数");
}
}
```
#### (2)while循环
1 while循环的格式
(1)基本格式:
while(判断条件语句) {
循环体语句;
}
(2)完整格式:
初始化条件语句;
while(判断条件语句) {
循环体语句;
控制条件语句;
}
2 执行流程
(1)执行初始化条件语句;
(2)执行判断条件语句,看其返回值是true还是false
如果是true,就继续执行
如果是false,就结束循环
(3)执行循环体语句;
(4)执行控制条件语句
(5)回到b继续。
3 我们通过两个案例演示一下while循环的统计思想和求和思想
(1) 统计思想:统计水仙花数有多少个
```java
public class Mydemo1 {
public static void main(String[] args) {
int j = 0;int i=100;
while(i<1000){
int i1 = (i / 10 / 10 % 10);
int i2 = (i / 10 % 10);
int i3 = (i % 10);
if(i1 * i1 * i1 + i2 * i2 * i2 + i3 * i3 * i3 == i) {
j++;
System.out.println("水仙花数有" + i);
}
i++;
}
System.out.println("共有" + j + "个水仙花数");
}
}
```
(2)求和思想:求1-100的和
```java
public class Mydemo1 {
public static void main(String[] args) {
int i=1;int sum=0;
while(i<=100){
sum+=i;i++;
}
System.out.println(sum);
}
}
```
#### (3)do...whlie循环
1 do...while的格式:
do {
循环体语句;
}while(判断条件语句);
完整格式;
初始化条件语句;
do {
循环体语句;
控制条件语句;
}while(判断条件语句);
2 执行流程
(1)执行初始化条件语句;
(2)执行循环体语句;
(3)执行控制条件语句;
(4)执行判断条件语句,看其返回值是true还是false
如果是true,就继续执行
如果是false,就结束循环
(5)回到b继续。
3 我们通过一个案例来演示下do...while语句
再控制台输出1-10
```java
public class Mydemo1 {
public static void main(String[] args) {
int i=1;
do{
System.out.println(i);
i++;
}
while(i<=10);
}
}
```
#### (4)循环结构三种循环语句的区别及注意事项死循环
1 三种循环语句的区别
(1):do...while循环至少执行一次循环体。
而for,while循环必须先判断条件是否成立,然后决定是否执行循环体语句。
(2):A: 如果你想在循环结束后,继续使用控制条件的那个变量,用while循环,否则用for循环。不知道用for循环。
因为变量及早的从内存中消失,可以提高内存的使用效率。
B:建议优先考虑for循环,然后是while循环 ,最后是do...while循环
2 死循环的注意事项
(1)一定要注意控制条件语句控制的那个变量的问题,不要弄丢了,否则就容易死循环。
(2)两种最简单的死循环格式
while(true){...}
for(;;){...}
#### (5)通过几个案例来熟悉循环结构的嵌套
1 请输出一个4行5列的星星(*)图案。
```java
public class Mydemo1 {
public static void main(String[] args) {
for (int j = 1; j < 5; j++) {
for (int i = 1; i < 5; i++) {
System.out.print("*");
}
System.out.println("*");
}
}
}
```
2 请输出下列的形状
*
**
***
****
*****
```java
public class Mydemo1 {
public static void main(String[] args) {
for (int j = 1; j < 6; j++) {
for (int i = 1; i < 5; i++) {if(i<j){
System.out.print("*");}
}
System.out.println("*");
}
}
}
```
3 在控制台输出九九乘法表
```java
package org.westos.zz;
import java.util.Scanner;
public class Mydemo1 {
public static void main(String[] args) {
for (int j = 1; j <= 9; j++) {
for (int i = 1; i <= 9; i++) {if(i<=j){
System.out.print(i+"*"+j+"="+i*j+"\t");}
}
System.out.println();
}
}
}
```