java流程控制
文章目录
用户交互Scanner
Scanner对象
-
前一篇里面没有实现程序与人的交互,Java里面有一个工具类,我们可以用来获取用户的输入。java.util.Scanner。
-
基本语法:
Scanner s= new Scanner(System.in);
- 通过Scanner类的next()和nextLine()方法获取输入的字符串,使用hasNext()与hasNextLine()来判断是否还有输入数据。
实例:1.这里采用next方法
import java.util.Scanner;
public class Demo01 {
public static void main(String[] args) {
//创建一个扫描器(Scanner)对象,用于接收键盘数据
Scanner s = new Scanner(System.in);//System.in表示接收键盘数据
//使用next方法接收
System.out.println("使用next方法接收");
//判断用户有没有输入字符串,if是判断语句
if(s.hasNext()){
String str = s.next();//定义一个字符串str接收输入的字符串
System.out.println("输入的内容是"+str);//打印输入内容
}
//凡是属于IO流的类如果不关闭会一直占用资源,养成好的习惯
s.close();//关闭s
}
}
我们输入 hello world
可以看到结果只输出了hello
2.这里采用nextLine方法
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 str = scanner.nextLine();
System.out.println("接收的内容为"+str);
}
scanner.close();
}
}
我们还是输入 hello world
我们可以看到输出结果为hello world
好了,这里我们总结一下:
-
next():
-
一定要读取到有效字符后才可以结束输入。
-
对输入有效字符之前遇到的空白,next()方法会自动将其去掉。
-
只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符。
-
next()不能得到带有空格的字符串。
-
-
nextLine():
- 以Enter为结束符,也就是说nextLine()方法返回的是输入回车之前的所有字符。
- 可以获得空白。
除了上面的next()和nextLine()方法以外,还有nextInt():接收整数,nextDouble():接收小数等方法,可以去百度或者查JDK的API。
流程控制
顺序结构
- Java的基本结构就是顺序结构:一句一句执行
- 顺序结构是最简单的算法结构
- 语句与语句之间,是按照从上往下的顺序执行,他是任何一种算法都离不开的一种算法结构。
示例:
//顺序结构演示
public class Demo03 {
public static void main(String[] args) {
//下面这些语句会按顺序执行
System.out.println(1);
System.out.println(2);
System.out.println(3);
System.out.println(4);
System.out.println(5);
}
}
结果:
选择结构
if单选结构
-
很多时候都需要去判断一个东西是否可行,然后执行,这样的语句用if语句来表示
-
语法:
if(布尔表达式){ //如果布尔表达式为true将执行的语句 }
这里太简单了,而且前面也有演示就不做专门示例了
if双选结构
-
双选择结构也是非常常见的,用if…else语句来表示
-
语法
if(布尔表达式){ //如果布尔表达式为true将执行的语句 }else{ //布尔表达式为false将执行的语句 }
运用示例:
import java.util.Scanner; //if双选择结构 public class Demo04 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String str = scanner.nextLine(); //这里判断输入的字符串是否为"对",equal()是一个判断字符串相等的方法 if(str.equals("对")){ System.out.println("输入正确"); }else { System.out.println("输入错误"); } } }
我们先输入正确的“对”
再输入错误的内容
if多选择结构
-
在实际情况中选择的个数可能会很多,这里需要用多选择结构if…else if…else
-
语法:
if(布尔表达式 1){ //如果布尔表达式 1的值为true执行代码 }else if(布尔表达式 2){ //如果布尔表达式 2的值为true执行代码 }else if(布尔表达式 3){ //如果布尔表达式3的值为true执行代码 }else{ //如果以上布尔表达式都不为true执行代码 }
示例
if 语句至多有1个else语句,else语句在所有else if语句之后.
一旦里面有一个布尔表达式为true,剩下的else if和最后的else都将跳过执行
import java.util.Scanner; //多选择结构 public class Demo05 { public static void main(String[] args) { //规定60分以下为不及格,60-85为良,85分以上为优秀 Scanner scanner = new Scanner(System.in); int grade = scanner.nextInt();//定义输入成绩的变量grade //多选择判断 if(grade<60){ System.out.println("不及格"); }else if(60<=grade&&grade<85){ System.out.println("良"); }else { System.out.println("优秀"); } } }
当输入55时
当输入65时
当输入90时
嵌套的if结构
-
就是在符合条件if语句里面继续判断嵌套if
-
语法:
if(布尔表达式){ //如果布尔表达式1值为true执行语句 if(布尔表达式 2){ //如果布尔表达式2的值为ture执行语句 } }
switch多选择结构
-
还有一种多选择结构就是switch。
-
switch case语句判断一个变量与一系列值中某一值是否相等。
-
语法:
switch (expression){//这里expression是被判断的变量 case value1: //被执行的语句 break;//可选 case value1: //被执行的语句 break;//可选 default://可选 //以上value值都不相等就执行这里的语句 //执行的语句 }
switch语句中的变量类型可以是:
-
byte.short、int或者char。
-
从Java SE 7开始
-
switch支持字符串 String类型了
-
同时case标签必须为字符串常量或字面量。
-
示例:
//switch演示
public class Demo06 {
public static void main(String[] args) {
char grade = 'C';
switch (grade){
case 'A':
System.out.println("优秀");
case 'B':
System.out.println("良好");
case 'C':
System.out.println("及格");
case 'D':
System.out.println("不及格");
default:
System.out.println("未知等级");
}
}
}
上面的代码没有添加break(可选),因为我想看看后果,输入结果为下图
原因:因为没有写break造成case穿透(从匹配到的结果开始执行下面每一条语句)
所以我们添加上break后
结论:虽然break;不添加没有报错,但是也会引起结果不理想。
循环结构
while循环
-
while是最基本的循环,它的结构为
while(布尔表达式){ //循环内容 }
- 只要布尔表达式为true,循环就会一直执行下去。
- 我们大多数情况是会让循环停止下来的,我们需要一个让表达式失效的方式来结束循环。
- 少部分情况需要循环一直执行,比如服务器的请求响应监听等。
- 循环条件一直为true就会造成无限循环【死循环】,我们正常的业务编程中应该尽量避免死循环。会影响程序性能或者造成程序卡死奔溃!
示例:
//while演示
public class Demo07 {
public static void main(String[] args) {
//循环扣666
int i = 0;//计数循环次数
while(i<3){//循环扣3次6
System.out.print(6);//不换行输出一个6,print是不换行输出,println是输出后换行
i++;//计数一次循环,每次循环加一
}
}
}
输出结果为:
do…while 循环
-
对于while循环来说,如果不符合条件,他一次循环都不会执行,有时候我们需要先执行才能判断,这时候就用do…while
-
do…while和while使用方法类似,这里不做示例
-
语法:
do{ //代码语句 }while(布尔表达式);
注意这里;容易漏掉
for 循环
虽然所有的循环结构都可以用while,do…while来表示,Java还是有一种叫for的循环,可以让一些循环变的简单。
- for循环语句是支持迭代的一种通用结构,是最有效、最灵活的循环结构。
- for循环执行的次数是在执行前就确定的。语法格式如下:
for(初始化;布尔表达式;更新){
//代码语句,也叫循环体
}
下面拿1加到100作为示例:
//for循环
public class Demo08 {
public static void main(String[] args) {
//1+..100
int sum = 0;//定义一个变量:总和
//循环结构
//初始化值 //条件判断 //迭代
for(int i=0; i<100; i++){//这里i是从0开始,到99刚好循环100次
sum+=i+1;//这里是偷懒写法,跟sum=sum+i+1一个意思,这里i初始为0,而我们要从1开始累加,所以i+1
}
System.out.println("1累加到100结果为"+sum);//打印结果
}
}
关于for循环有以下几点说明:
- 最先执行初始化步骤。可以声明一种类型,但可初始化一个或多个循环控制变量,也可以是空语句。
- 然后,检测布尔表达式的值。如果为 true,循环体被执行。如果为false,循环终止,开始执行循环体后面的语句。执行一次循环后,更新循环控制变量(迭代因子控制循环变量的增减)。再次检测布尔表达式。循环执行上面的过程。
增强for循环
-
java5之后引入的主要用于数组和集合的增强For循环
-
语法格式:
for(声明语句 :表达式){ //代码句子 }
- 声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配。
- 其作用域限定在循环语句块,其值与此时数组元素的值相等。
- 表达式:表达式是要访问的数组名,或者是返回值为数组的方法。
示例:
//增强for循环演示
public class Demo09 {
public static void main(String[] args) {
int[] nums = {10,10,154,147,15};//这里定义一个数组
//增强for循环遍历数组nums
for (int num : nums) {//解释:这里就是把集合nums里面的每一个元素按照从前往后的顺序赋予num,直到nums集合中没有元素
System.out.println(num);
}
}
}
break continue goto
break
- break在任何循环语句的主体部分,均可用break控制循环的流程。break用于强行退出循环,不执行循环中剩余的语句。(break语句也在switch语句中使用)
示例:
public class Demo010 {
public static void main(String[] args) {
//我们规定在打印到50的时候退出循环
for (int i = 0; i < 100; i++) {
System.out.println(i);
if(i==50){
break;//i=50时终止循环
}
}
}
}
结果如图:
continue
- continue语句用在循环语句体中,用于终止某次循环过程,即跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判定。
示例:
public class Demo11 {
public static void main(String[] args) {
//规定在i=50时,跳过50不输出,继续输出后面的
for (int i = 0; i < 100; i++) {
if(i==50){
continue;//跳过50
}
System.out.println(i);
}
}
}
结果如图:
goto(不需要掌握,了解一下)
- goto关键字很早就在程序设计语言中出现。尽管goto仍是Java的一个保留字,但并未在语言中得到正式使用;Java没有goto。然而,在break和continue这两个关键字的身上,我们仍然能看出一些goto的影子—带标签的break和continue.
- “标签”是指后面跟一个冒号的标识符,例如🏷
- 对Java来说唯一用到标签的地方是在循环语句之前。而在循环之前设置标签的唯一理由是:我们希望在其中嵌套另一个循环,由于break和continue关键字通常只中断当前循环,但若随同标签使用,它们就会中断到存在标签的地方.
本篇文章主要是个人的学习日记,希望各位大佬指正