java09_java流程控制(用户交互的Scanner,顺序结构,选择结构,循环结构,break & continue)
java流程控制
1,用户交互的Scanner
-
java.util.Scanner是java5的新特征,计算机可以通过Scanner类来获取用户的输入。
-
基本语法:
Scanner s = new Scanner(System.in);
-
通过Scanner类的next()与nextLine()方法获取输入的字符串,在读取前我们一般需要使用hasNext()与hasNextLine()判断是否还有输入的数据。
——next()
package 史前蓝熊.Scanner;
import java.util.Scanner;
public class Day01 {
public static void main(String[] args) {
//创建一个扫描器对象,用于接收键盘数据
Scanner scanner = new Scanner(System.in);
System.out.println("使用next方式接收:");
//使用next方式接收
String str = scanner.next();
System.out.println("输入的内容:"+str);
//凡是属于IO流的类如果不关闭会一直占用资源,要养成好习惯用完就关。
//用完之后关闭scanner,节省资源。
scanner.close();
}
}
结果:
使用next方式接收:
hello world
输入的内容:hello
- 1,一定要读取到有效字符后才可以结束输入。
- 2,对输入有效字符之前遇到的空白,next()会自动将其去掉。
- 3,输入有效字符后面的空白可以作为分隔符或者结束符。
- 4,next()不能得到带有空格的字符串。
—其他的方法:
package 史前蓝熊.Scanner;
import java.util.Scanner;
public class Day03 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个整数:");
//从键盘接收数据
int i= 0;
float f = 0.0f;
if(scanner.hasNextInt()){
i = scanner.nextInt();
System.out.println("得到的整数:"+i);
}
else{
System.out.println("输入的不是整数");
}
Scanner scanner1 = new Scanner(System.in);
System.out.println("请输入小数:");
if(scanner1.hasNextFloat()){
f = scanner1.nextFloat();
System.out.println("输入的小数:"+f);
}
else{
System.out.println("输入的不是小数");
}
scanner1.close();
scanner.close();
}
}
结果:
请输入一个整数:
00090
得到的整数:90 //整数的读取,会忽略第一个非零数前面的0。
请输入小数:
12
输入的小数:12.0//即使输入的是整数,也会被读取为小数。
—— nextline()
package 史前蓝熊.Scanner;
import java.util.Scanner;
public class Day02 {
public static void main(String[] args) {
//创建一个扫描器对象,用于接收键盘数据
Scanner scanner = new Scanner(System.in);
System.out.println("使用nextLine方式接收:");
//使用nextLine方式接收
String str = scanner.nextLine();
System.out.println("输入的内容:"+str);
//凡是属于IO流的类如果不关闭会一直占用资源,要养成好习惯用完就关。
//用完之后关闭scanner,节省资源。
scanner.close();
}
}
结果:
使用nextLine方式接收:
hello world
输入的内容: hello world
- 1,以Enter(回车键)作为结束符,也就是说nextline()方法返回的是输入回车键之前的全部字符。
- 2,可以得到带有空格的字符串。
——scanner发现:
package 史前蓝熊.Scanner;
import java.util.Scanner;
public class Day04 {
public static void main(String[] args) {
int num1=0;
int num2=0;
int num3=0;
int num4=0;
float num5 = 0f;
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个整数:");
if(scanner.hasNextInt()){
num1= scanner.nextInt();
System.out.println("输入的num1:"+num1);
}
else{
System.out.println("输入的不是整数");
}
if(scanner.hasNextInt()){
num2= scanner.nextInt();
System.out.println("输入的num2:"+num2);
} else{
System.out.println("输入的不是整数");
}
if(scanner.hasNextInt()){
num3= scanner.nextInt();
System.out.println("输入的num3:"+num3);
} else{
System.out.println("输入的不是整数");
}
if(scanner.hasNextInt()){
num4= scanner.nextInt();
System.out.println("输入的num4:"+num4);
} else{
System.out.println("输入的不是整数");
}
if(scanner.hasNextFloat()){
num5= scanner.nextFloat();
System.out.println("输入的num5:"+num5);
} else{
System.out.println("输入的不是小数");
}
scanner.close();
}
}
结果1:
请输入一个整数:
1
输入的num1:1
2
输入的num2:2
3
输入的num3:3
4
输入的num4:4
5
输入的num5:5.0//整数类型的5被转化为浮点数。
结果2:
请输入一个整数:
1
输入的num1:1
1.1
输入的不是整数
输入的不是整数
输入的不是整数
输入的num5:1.1//因为第二个的错误,程序没有在第三,四个位置进行读取操作,在第五个数的位置被识别为正确的。
结果3:
请输入一个整数:
1.1
输入的不是整数
输入的不是整数
输入的不是整数
输入的不是整数
输入的num5:1.1//因为第一个的错误,程序没有在第二,三,四个位置进行读取操作,在第五个数的位置被识别为正确的。
- 当利用一个Scanner对象进行多次数据读取时,输入类型正确,可以继续输入读取。输入类型错误的话,之后的判断将沿用这个错误的数据进行判断,直到判断正确或程序结束。
2,顺序结构
- java的基本结构就是顺序结构,除非特别指明,否则就按照顺序一句一句执行。
- 顺序结构是最简单的算法结构。
- 它是任何一个算法都离不开的一种基本算法结构。
3,选择结构
——if单选择结构
语法:
if(布尔表达式){
//如果布尔表达式为true,将执行的语句
}
——if双选择结构
if(布尔表达式){
//布尔表达式为true,将执行的语句
}
else{
//布尔表达式为false,将执行的语句
}
——if多选择结构
if(布尔表达式1){
//布尔表达式1为true,将执行的语句
}
else if(布尔表达式2){
//布尔表达式2为true,将执行的语句
}
else if(布尔表达式3){
//布尔表达式3为true,将执行的语句
}
else{
//上述所有布尔表达式都为false,将执行的语句
}
- 当一个条件为真的时候,就跳出选择结构。
——if的嵌套结构
if(布尔表达式1){
//布尔表达式1为true,将执行的语句
if(布尔表达式2){
//布尔表达式2为true,将执行的语句
}
}
——switch多选择结构
switch(expression){
case value://语句1
break;
case value://语句2
break;
default://语句3
}
- switch语句中的变量类型可以为:
-byte,short,int或者char。
-从java SE 7 开始,switch支持字符串String类型。
-同时,case标签必须为字符串常量或字面量。
补充:
-
反编译
字符串的本质还是数字,在生成的class文件里,每一个String变量都对应一个hashCode,switch里面进行比较的是hashCode。
4,循环结构
——while循环
while(布尔表达式){
//循环内容
}
- 只要布尔表达式为true,循环就会一直进行下去。
- 我们需要根据情况,终止循环。
——do while
do{
//代码语句
}while(布尔表达式);
-
有时候我们需要即使不满足条件,也至少执行一次,这时候我们需要do... ...while 。
while与do... ... while的区别:
-
do... ...while 与while相似,但do... ... while至少执行一次。
-
do... ...while是先执行再判断,while是先判断再执行。
——for循环
for(初始值;布尔表达式;更新){
//代码语句
}
快捷输入:
100.for回车
生成:
for (int i = 0; i < 100; i++) {
}
- for循环是支持迭代的一种通用结构,是最有效,最灵活的循环结构。
- for循环的执行次数是在执行前确定的。
——增强for循环
for(声明语句:表达式)
{
//代码句子
}
例子:
package 史前蓝熊.Cycle;
public class EnhanceFor {
public static void main(String[] args) {
//定义一个数组
int[] numbers = {10,20,30,40};
//遍历数组中的元素
for(int x:numbers){
System.out.println(x);
}
}
}
结果:
10
20
30
40
- java5 引入了一种主要用于数组或集合的增强型for循环。
- 声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配。其作用域限定在循环语句块,其值与此时数组元素的值相等。
- 表达式:表达式是要访问的数组名,或者是返回值为数组的方法。
5,break & continue
package 史前蓝熊.Cycle;
public class Break01 {
public static void main(String[] args) {
int i = 0;
while(i<100){
i++;
System.out.println(i);
if(i==30){
break;
}
}
}
}
结果:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30//跳出循环
- break在任何循环语句的主题部分,均可用break控制循环的流程。break用于强行退出循环,不执行循环中剩下的语句。(break语句也在switch语句中使用)
public class Continue01 {
public static void main(String[] args) {
int i =0;
while(i<10){
i++;
if(i%2==0){
continue;
}
System.out.println(i);
}
}
}
结果:
1
3
5
7
9
//遇到偶数的话,执行continue,其后语句不执行,直接判断下一次条件是否继续进行循环。
- continue语句用在循环语句体中,用于终止某次循环过程,即跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判断。
扩展:(关于goto关键字)
- goto关键字很早就在程序设计语言中出现,尽管goto仍是java的一个保留字,但并未得到正式使用;java没有goto。然而,在break和continue着两个关键字的身上,我们仍然能看到goto的影子---带标签的break和continue。
- “标签”是指后面跟一个冒号的标识符,例如:label:
public class Label_01 {
public static void main(String[] args) {
//打印101~150之间的所有质数
A:for(int min = 101;min<150;min++) {
for (int min2=2;min2 < min/2; min2++) {
if (min % min2 == 0) {
continue A;
}
}
System.out.println(min);
}
System.out.println("END");
}
}
结果:
101
103
107
109
113
127
131
137
139
149
END
- 对java来说唯一用到标签的地方是在循环语句之前。而在循环之前设置标签的唯一理由是:我们希望在其中嵌套另外一个循环,由于break和continue关键字通常只中断当前循环,但若随同标签使用,它们可以中断到存在标签的地方。