Java流程控制
用户交互Scanner
-
之前的基本语法并没有实现程序和人的交互,但是Java给我们提供了这样一个工具类用于获取用户的输入。Java.util.Scanner是Java5的新特征,可以通过Scanner类来获取用户的输入。
-
基本语法:
Scanner s = new Scanner(System.in);
通过Scanner类的next()与nextLine()方法获取输入的字符串,在使用前一般要通过hasNext()与hasNextLine()判断是否还有输入的数据。
Scanner对象
- next():
- 一定要读取到有效字符后才可结束输入。
- 对输入有效字符之前遇到的空白,next()方法会自动将其去掉。
- 只有输入有效字符后才将期后面输入的空白作为分隔符或结束符。
- next()不得到带有空格的字符串
- nextLine():
- 以Enter为结束符,nextLine()方法返回的是输入回车之前的所有字符。
- 可以获得空白
import java.util.Scanner;
public class Demo01 {
public static void main(String[] args) {
//创建一个扫描器对象,用于接收键盘数据
Scanner scanner = new Scanner(System.in);
System.out.println("使用next方式接收:");
//判断用户有没有输入字符
if (scanner.hasNext()) {
//使用next方式接收
String str = scanner.next();
System.out.println("输入的内容为:" + str);
}
//凡是属于IO流的类如果不关闭会一直占用资源,要养成好习惯用完既关
scanner.close();
}
}
import java.util.Scanner;
public class Demo02 {
public static void main(String[] args) {
//从键盘接收数据
Scanner scanner = new Scanner(System.in);
System.out.println("用nextLine方式接收:");
// 判断是否还有输入
if (scanner.hasNextLine()){
String s = scanner.nextLine();
System.out.println("输入的内容为:" + s);
}
scanner.close();
}
}
import java.util.Scanner;
public class Demo03 {
public static void main(String[] args) {
//从键盘接收数据
Scanner scanner = new Scanner(System.in);
System.out.println("请输入数据:");
String s = scanner.nextLine();
System.out.println("输入的内容为:" + s);
scanner.close();
}
}
import java.util.Scanner;
//Scanner的进阶使用
public class Demo04 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
//从键盘接收数据
int i = 0;
float f = 0.0f;
System.out.println("请输入整数:");
if (scanner.hasNextInt()){
i = scanner.nextInt();
System.out.println("整数数据:" + i);
}else{
System.out.println("输入数据错误!");
}
System.out.println("请输入浮点数:");
if (scanner.hasNextFloat()){
f = scanner.nextFloat();
System.out.println("浮点数数据:" + f);
}else{
System.out.println("输入数据错误!");
}
scanner.close();
}
}
import java.util.Scanner;
public class Demo05 {
//输入多个数字,求其总和与平均数,每输入一个数字用回车确认,通过输入非数字来结束输入并输出执行结果
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
double sum = 0;//定义和变量并初始化
int i = 0; //定义输入数字的数量变量并初始化
//通过循环判断是否还有输入,并在里面对每一次进行求和与统计
while(scanner.hasNextDouble()){
double x = scanner.nextDouble();
//求和
sum = sum + x;
i++ ;//统计
}
System.out.println("总和是:" + sum);
System.out.println("平均值是:" + (sum/i));
scanner.close();
}
}
顺序结构
- Java的基本结构就是顺序结构,除非特别指明,否则就按照一句一句执行。
- 顺序结构是最简单的算法结构。
- 语句与语句之间,框与框之间是按从上到下的顺序进行的,它是由若干个一次执行的处理步骤组成的,它是任何一个算法都离不开的一种基本结构。
选择结构
-
if单选择结构
if(布尔表达式){执行语句}
-
if双选择结构
if(布尔表达式){执行语句1}else{执行语句2}
-
if多选择结构
if(布尔表达式){执行语句1}else if(布尔表达式2){执行语句2}else if(布尔表达式3){执行语句3}...else{执行语句x}
-
嵌套的if结构
-
switch多选择结构
1. 另一个多选择结构实现方式是switch case语句。
2. switch case 语句判断一个变量与一系列值中的某个值是否相等,每个值称为i各分支。
- switch语句中变量类型可以是byte、short、int、char、String(从Java SE 7开始,case标签必须为字符串常量或字面量)。
switch(expression){ case value : //语句 break; case value : //语句 break; //可以有任意数量的case语句 default: //语句 break; }
import java.util.Scanner;
public class Demo01 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入:");
String str = scanner.nextLine();
//equals:判断字符串是否相等
if (str.equals("Hello")){
System.out.println(str);
}
System.out.println("End");
scanner.close();
}
}
import java.util.Scanner;
public class Demo02 {
public static void main(String[] args) {
System.out.println("请输入成绩等级:");
Scanner scanner = new Scanner(System.in);
String grade = scanner.next();
//case穿透
//switch匹配一个具体的值
switch (grade) {
case "A":
System.out.println("牛!");
break;
case "B":
System.out.println("加油!");
break;
case "C":
System.out.println("不太行!");
break;
case "D":
System.out.println("很危险!");
break;
case "E":
System.out.println("埋了吧!");
break;
default:
System.out.println("数据无效!");
break;
}
scanner.close();
}
}
//字符的本质还是数字
//反编译 java --- class(字节码文件) --- 反编译(IDEA)
//每一个对象都有自己的hashCode,通过hash值进行比较
循环结构
-
while循环
while(布尔表达式){循环内容}
//计算1~100数字总和 public class Demo04 { public static void main(String[] args) { int sum = 0; int i = 1; //while语句 while (i<=100){ sum = sum + i; i++; } System.out.println("结束时i的值为:" + i); System.out.println("和为:" + sum); } }
public class ForDemo02 {
public static void main(String[] args) {
//用while或for循环输出1~1000之间能被5整除的数,且每行输出3个
int i = 1;
int n = 0;
while (i <= 1000) {
if (i % 5 == 0) {
System.out.print(i + "\t");
n++; //记一次数
if (n == 3) { //每行输出3个数字时换行
System.out.println();
n = 0;
}
}
i++;
}
}
}
-
do…while循环
do{循环内容}while(布尔表达式);
//计算1~100数字总和 public class Demo05 { public static void main(String[] args) { int sum = 0; int i = 1; //do...while语句 do{ sum = sum + i; i++; }while(i<=100); System.out.println("结束时i的值为:" + i); System.out.println("和为:" + sum); } }
-
for循环
for(初始化;布尔表达式;步进语句){循环内容}
for循环语句是支持迭代的一种通用结构,是最有效、最灵活的循环结构。
for循环执行的次数是在执行前就确定的。
public class ForDemo01 { public static void main(String[] args) { //计算0~100之间奇数和偶数的和 int oddSum = 0; //奇数和 int evenSum = 0; //偶数和 for (int i = 1; i <= 100; i++) { if (i % 2 != 0) { oddSum = oddSum + i; } else { evenSum = evenSum + i; } } System.out.println("奇数和为:" + oddSum); System.out.println("偶数和为:" + evenSum); } }
public class ForDemo03 {
public static void main(String[] args) {
/*
1.先打印一列
2.把固定的数用循环包起来
3.去掉重复项
4.调整样式
*/
//打印九九乘法表
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
System.out.print(i + "*" + j + "=" + i * j + "\t");
}
System.out.println();
}
}
}
-
在java5中引入了一种主要用于数组的增强型for循环
for(声明语句 : 表达式){循环内容}
声明语句:声明新的局部变量,该变量类型必须与数组元素的类型匹配。其作用域限定在循环语句块,其值与此时数组元素的值相等。
表达式:表达式是要访问的数组名,或是返回值为数组的方法。
public class ForDemo04 { public static void main(String[] args) { int[] numbers = {1,2,3,4,5}; //遍历数组的元素 for (int x:numbers){ System.out.println(x); } } }
break & continue
- break语句,主要用于循环语句和switch语句中,执行时整个循环或者switch语句立即结束,用于强制终止整个循环或者switch语句。
- continue语句,用于循环语句,执行时立刻跳过当前循环内容,开始下次循环。
练习
public class TestDemo01 {
public static void main(String[] args) {
//打印5行三角形
for (int i = 1; i <= 5; i++) { //共5行
for (int j = 1; j <= 5 - i; j++) {
System.out.print(" ");
}
for (int j = 1; j <= (2 * i - 1); j++) {
System.out.print("*");
}
System.out.println();
}
}
}
每行打印顺序从左至右,空白和*都要打印。