第一节:交互Scanner
1. 概念
-
Scanner :实现人机交互。用于获取用户输入的信息。位于java.util.Scanner包。
-
语法:
Scanner i = new Scanner(System.in);
-
通过Scanner类的next()与nextLine()方法获取输入的字符串,读取通过hasNext()与hasNextLine()判断是否还有输入的数据。
-
next()
-
一定要读取到有效字符串后才可以结束输入
-
对输入有效字符之前遇到的空白,next()方法会自动将其去掉
-
只对输入有效字符后才将其输入的空白作为分隔符或结束符
-
next()方法不能得到带有空格的字符串
-
-
nextLine()
-
以Enter为结束符,也就是说nextLine()方法返回的是输入回车之前的所有字符
-
可以获取空白信息
-
2. 示例
//创建一个扫描器对象,用于从键盘获取用户输入的数据
Scanner i = new Scanner(System.in);
System.out.println("使用nextLine()接收:");
//使用nextLine()方式接收
String str1 = i.nextLine();
System.out.println("输出的内容为:" + str1);
System.out.println("使用next()接收:");
//使用next()方式接收
String str2 = i.next();
System.out.println("输出的内容为:" + str2);
//关闭资源I/O
i.close();
//输入多个数,求和与平均数
//从键盘接收数据
Scanner i = new Scanner(System.in);
//和
double sum = 0;
//记录次数
int count = 0;
//循环输入
while(i.hasNextDouble()){
double a = i.nextDouble();
count++;
sum+=a;
System.out.println("您输入了第"+count+"次数据,和为"+sum);
}
System.out.println("和为:"+sum);
System.out.println("平均数为:"+(sum/count));
第二节:选择结构
1. if选择结构
1.1. if单分支
-
判断一个事物是否可行,然后去执行,这样的一个过程通常使用if语句进行判断
-
语法:
if(布尔表达式){ //如果布尔表达式为true,执行该代码块 }
-
流程图:
-
示例:
Scanner i = new Scanner(System.in);
System.out.println("请输入内容:");
String str = i.nextLine();
//equals:判断字符串是否相等
if(str.equals("hello")){
System.out.println("输入的内容为:"+str);
}
i.close();
1.2. if双分支
-
语法:
if(布尔表达式){ //如果布尔表达式为true,执行该代码块 }else{ //如果布尔表达式为true,执行该代码块 }
-
流程图:
-
示例:
//成绩大于60则及格,小于60则不及格 Scanner i = new Scanner(System.in); System.out.println("请输入一个成绩:"); double score = i.nextDouble(); if(score >= 60){ System.out.println("及格"); }else{ System.out.println("不及格"); } i.close();
1.3. 多重if
-
语法:
if(布尔表达式 1){ //如果布尔表达式1的值为true执行代码 }else if(布尔表达式 2){ //如果布尔表达式2的值为true执行代码 }else if(布尔表达式 3){ //如果布尔表达式3的值为true执行代码 }else { //如果以上布尔表达式都不为true执行代码 }
-
流程图:
-
示例:
//成绩100则满分,大于90则A级;大于80则B级;大于70则C级;大于60则D级;小于60不及格,否则成绩不合法 Scanner i = new Scanner(System.in); System.out.println("请输入一个成绩:"); double score = i.nextDouble(); if (score == 100) { System.out.println("恭喜满分!"); } else if (score < 100 && score >= 90) { System.out.println("恭喜A级!"); } else if (score < 90 && score >= 80) { System.out.println("恭喜B级!"); } else if (score < 80 && score >= 70) { System.out.println("恭喜C级!"); } else if (score < 70 && score >= 60) { System.out.println("恭喜D级!"); } else if (score < 60 && score >= 0) { System.out.println("不及格!"); } else { System.out.println("成绩不合法!"); } i.close();
1.4. 嵌套if
-
语法:
if(布尔表达式 1){ //如果布尔表达式1的值为true执行代码 if(布尔表达式 2){ //如果布尔表达式2的值为true执行代码 }esle{ //如果布尔表达式的值为false执行代码 } }else{ //如果以上布尔表达式都不为true执行代码 }
-
流程图:
-
示例:
int x = 66; if( x > 22 ){ System.out.println("x>22"); if(x > 44){ System.out.println("x>44"); }else{ System.out.println("x<44"); } }else{ System.out.println("x<22"); }
2. switch选择结构
2.1. 概念
-
switch case语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支
-
switch语句中的变量类型可以是:
-
byte/short/int/char
-
从Java SE7开始switch支持String类型
-
-
注意:使用case标签时,字符串必须是常量
2.2. 语法
switch(expression){
case value :
//语句
break;
case value :
//语句
break;
//case...
default :
break;
//语句
}
2.3. 示例
char grade = 'C';
//switch匹配一个具体的值
//若case代码块后不加brake,会有case穿透现象
switch (grade) {
case 'A':
System.out.println("优秀");
break;
case 'B':
case 'C':
System.out.println("良好");
break;
case 'D':
System.out.println("及格");
break;
case 'E':
System.out.println("挂科");
break;
default:
System.out.println("未知等级!");
}
第三节:循环结构
1. while
-
当条件成立时(布尔表达式为true),重复的做某一件事情
-
大多数情况下会让表达式失效,来结束循环(避免程序进入死循环,导致程序崩溃,卡顿)
-
少部分需要循环一直执行,如服务器请求、响应、监听等
-
特点:先判断,再执行
-
语法:
while(循环条件){ //循环操作 }
-
示例:
//计算1--100的值 int sum = 0; int num = 0; while(num <= 100){ sum +=num; num++; } System.out.println("1~100的值"+sum); //输出 5050
2. do-while
-
当不满足循环条件时,也会执行一次
-
特点:先执行,再判断
-
语法:
do{ //循环操作 }while(循环条件);
-
示例:
//计算1--100的值 int sum = 0; int num = 0; do{ sum +=num; num++; }while(num <= 100); System.out.println("1~100的值"+sum); //输出 5050
3. for循环
-
作用:反复执行一段代码,直到满足一定的条件为止
-
for循环语句支持迭代的一种通用结构,是最有效、最灵活的循环结构
-
循环结构由四个部分组成:
-
初始部分:设置循环的初始状态
-
循环体:重复执行的代码
-
迭代部分:下一次循环开始前要执行的部分
-
循环条件:判断是否继续执行的条件
-
-
语法:
for(初始部分;条件判断;迭代部分){ //循环体 }
-
执行顺序:
1.先执行初始化步骤。可以声明一种类型,但可初始化一个或多个循环控制变量,也可以是空语句。
2.进行循环条件判断
2.根据循环条件判断结果。如果为true,循环体被执行。如果为false,循环终止,开始执行循环体后面的语句。
3.执行一次循环后,更新循环控制变量(迭代因子控制循环变量的增减)。
4.再次进行循环条件判断。循环执行上面的过程。
-
示例:
//循环输出0-1000中能被5整除的数,并每行显示3个数 for (int i = 0; i <= 1000; i++) { if(i%5==0){ System.out.print(i+"\t"); } if(i%(5*3)==0){ System.out.println(); } }
//嵌套for循环 //打印九九乘法表 for (int i = 1; i <= 9; i++) { for (int j = 1; j <= i; j++) { System.out.print(j+"*"+i+"="+(i*j) + "\t"); } System.out.println(); }
4. foreach
-
由Java JDK5引入了一种主要用于数组和集合的增强型for循环
-
语法:
for(元素类型type 元素变量value : 遍历对象obj){ //引用value变量的java语句,遍历出数据 }
-
示例:
//定义一个数组 int[] array = {10,20,30,40,50,60}; //循环遍历数据 for (int x:array) { System.out.println(x); //输出 10,20,30,40,50,60 }
5.break/continue
-
break:在任何循环语句的主体部分,均可以使用break控制循环流程。break用于强行退出循环(终止循环),不执行循环中的其余语句。
- 示例:
int i = 0; while(i<100){ i++; System.out.println(i); if(i >= 30){ break; } }
-
continue:用在循环语句体中,用于终止某次循环过程(退出本次循环,进入下次循环),即跳过循环中尚未执行的语句,接着进行下一次是否执行循环的判定
- 示例:
int i = 0; while(i < 100){ i++; if(i % 10 == 0){ System.out.println(); continue; } System.out.print(i+" "); }
- 示例:打印三角形
//打印三角形 5行 for (int i = 1; i <= 5; i++) { for (int j = 5; j >=i; j--) { System.out.print(" "); } for (int j = 1; j <= i; j++) { System.out.print("*"); } for (int j = 1; j < i; j++) { System.out.print("*"); } System.out.println(); }