Java流程控制
1,用户交互Scanner
Scanner对象
-
基础语法:Scanner s = new Scanner(System.in);
-
通过Scanner类的next()与nextLine()方法获取输入的字符串,在读取前我们一般需要用hasNext()与hasNextLine()判断是否还有输入的数据
package com.wxj.www.operator.Scanner; import java.util.Scanner; public class Demo01 { public static void main(String[] args) { //创建一个扫描对象,用于接收键盘数据 Scanner scanner =new Scanner(System.in); System.out.println("使用next方式接收:"); // System.out.println("使用nextLine方式接收:");多行字符接收 //判断用户是否输入字符串 if (scanner.hasNext()){ //也可以不需要if来判断,直接实现 // if (scanner.hasNextLine()) String str = scanner.next(); System.out.println("输出的内容为:"+str); } //凡是属于IO流的类如果使用完不关闭会一直占用资源 scanner.close(); } }
//不需要判断也可以 package com.wxj.www.operator.Scanner; import java.util.Scanner; public class Demo02 { public static void main(String[] args) { //创建一个扫描对象,用于接收键盘数据 Scanner scanner =new Scanner(System.in); System.out.println("使用next方式接收:"); String str = scanner.next(); System.out.println("输出的内容为:"+str); // System.out.println("使用nextLine方式接收:");多行字符接收 //凡是属于IO流的类如果使用完不关闭会一直占用资源 scanner.close(); } }
-
next()
- 1,一定要读取到有效字符后才可以结束输入
- 2,对输入有效字符之前遇到的空白,next()方法会自动去掉
- 3,只有输入有效字符后才将其后面输入的空白作为分隔符或着结束符
- 4,next()不能得到带有空格的字符串
-
nextLine()
- 1,以Enter为结束符,也就是说nextLine()方法返回的是输入回车之前的所有字符
- 2,可以获取空白
其他用法
package com.wxj.www.operator.Scanner;
import java.util.Scanner;
public class Demo03 {
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("输入的不是小数数据!");
}
}
}
实例
package com.wxj.www.operator.Scanner;
import java.util.Scanner;
public class Demo04 {
public static void main(String[] args) {
//我们可以输入多个数字,并求其总和与平均数,每输入一个数字用回车确认,通过输入非数字来结束输入并输出执行结果
Scanner scanner = new Scanner(System.in);
//和
double sum = 0;
//计算输入了多少个数字
int m = 0;
//通过循环判断是否还有输入,并在里面对每一次进行和统计
while (scanner.hasNextDouble()){
double x = scanner.nextDouble();
m = m + 1;//m++
sum = sum + x;
System.out.println("你输入了第"+m+"个数据,当前结果sum="+sum);
}
System.out.println(m + "个数的和为" + sum);
System.out.println(m + "个数的平均值是" + (sum / m));
scanner.close();
}
}
2,顺序结构
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{ //如果以上布尔表达式都不为true将执行的语句 }
-
嵌套的if结构
if(布尔表达式1){ //如果布尔表达式1的值为true执行代码 if(布尔表达式2){ //如果布尔表达式2的值为true执行代码 } }
-
switch多选择结构
switch(表达式){ case value : //语句 break; //可选,防止case穿透,同下 case value : //语句 break; //可选 //可以有任意数量的case语句 default : //可选 //语句 }
- switch语句中的变量类型可以是:
- byte,short,int,char
- 从java SE 7开始
- switch支持字符串String类型
- 同时case标签必须为字符串常量或字面量
- switch语句中的变量类型可以是:
4,循环结构
-
while循环
while(布尔表达式){ //循环内容 }
- 只要布尔表达式为true,循环就会一直执行下去
- 我们大多数情况是让循环停止下来的,我们需要一个让表达式失效的方式来结束循环
- 少部分情况需要循环一直执行,比如服务器的请求响应监听等
- 循环条件一直为true就会造成无限循环(死循环),我们正常的业务编程中应尽量避免死循环,会影响程序性能或者造成程序卡死奔溃!
- 如果不满足条件,则不能进入循环
-
do…while
do{ //代码语句 }while(布尔表达式)
- 至少会执行循环一次
-
while与do-while的区别:
- while先判断后执行,do-while先执行后判断
- do-while总是保证循环体会被至少执行一次
-
for循环
for(初始化;布尔表达式;更新){ //代码语句 }
- 支持迭代的一种通用结构
- 可以是全空语句,但**;**不能丢
-
实例
- 求100以内所有奇数与偶数的和(快捷键实现for,100.for)
package com.wxj.www.struct; public class ForDemo01 { public static void main(String[] args) { int oddSum = 0; int evenSum = 0; for (int i = 0; i < 100; i++) { if (i%2!=0){ oddSum += i; }else{ evenSum += i; } } System.out.println("奇数的和"+oddSum); System.out.println("偶数的和"+evenSum); } }
-
1-1000之间被5整除的数,并且每行输出三个
package com.wxj.www.struct; public class ForDemo02 { public static void main(String[] args) { for (int i = 0; i <= 1000; i++) { if (i%5==0){ System.out.print(i+"\t"); } if (i%(5*3)==0){ //System.out.println(); System.out.print("\n"); } } } }
- println 输出完会换行
- print 输出完不会换行
-
9*9乘法表
package com.wxj.www.struct; public class ForDemo03 { public static void main(String[] args) { for (int j = 1; j <= 9; j++) { for (int i = 1; i <= j; i++) { System.out.print(i+"*"+j+"="+(i*j)+"\t"); } System.out.println(); } } }
-
增强for循环(重点用于循环数组与集合的)
基本语法结构
for(声明语句:表达式){ //代码语句 }
package com.wxj.www.struct; public class ForDemo04 { public static void main(String[] args) { int[] numbers = {10,20,30,40,50}; for (int i = 0; i < 5; i++) { System.out.println(numbers[i]); } System.out.println("=========================="); for (int x:numbers){ System.out.println(x); } }
5,break&continue
- break在任何循环语句的主体部分,均可用break控制循环的流程;break用于强行退出循环,不执行循环中剩余的语句。(break语句也在switch语句中使用)
- continue语句用在循环语句体中,用于终止某次循环过程,即跳过循环体中尚未执行的语句,接着执行下一次是否执行循环的判定
-
打印5行三角形
package com.wxj.www.struct; public class ForDemo05 { public static void main(String[] args) { 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(); } } }