从头开始学Java—Java流程控制
Java流程控制
说明:1.我建了一个包,叫control,来存放这一章节的源码。2.Java学习观看了B站的UP主“遇见狂神说”的视频和网站菜鸟教程。3.插加入的图片通常是代码跑出来的结果。点击下载JavaSE-v2.0源码
一、用户交互Scanner
java.util.Scanner 是 Java5 的新特征,我们可以通过 Scanner 类来获取用户的输入
下面是创建 Scanner 对象的基本语法:
Scanner s = new Scanner(System.in);
通过 Scanner 类的 next() 与 nextLine() 方法获取输入的字符串,在读取前我们一般需要 使用 hasNext 与 hasNextLine 判断是否还有输入的数据
-
next() 与 nextLine() 区别
- next():
- 一定要读取到有效字符后才可以结束输入
- 对输入有效字符之前遇到的空白,next() 方法会自动将其去掉
- 只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符
- next() 不能得到带有空格的字符串
-
nextLine():
-
以Enter为结束符,也就是说 nextLine()方法返回的是输入回车之前的所有字符
-
可以获得空白
-
public class ScannerDemo {
public static void main(String[] args) {
// 创建一个扫描器对象,用于接收键盘数据
Scanner scanner = new Scanner(System.in);
System.out.println("请输入数据:");
// 判断用户有没有输入字符串
if (scanner.hasNext()){
// 使用next接收用户的输入
String str = scanner.next();
System.out.println("使用next输出的内容为:" + str);
}
/*可以输入空格
if (scanner.hasNextLine()){
String s = scanner.nextLine();
System.out.println("使用nextLine输入的内容为:"+s);
}
*/
// 凡是使用IO流的类,如果不关闭就会一直使用资源
scanner.close();
}
}

如果要输入 int 或 float 类型的数据,在 Scanner 类中也有支持,但是在输入之前最好先使用 hasNextXxx() 方法进行验证,再使用 nextXxx() 来读取:
public class ScannerDemo {
public static void main(String[] args) {
int i ;
float f ;
System.out.print("请输入整数:");
if (scanner.hasNextInt()) {
// 判断输入的是否是整数
i = scanner.nextInt();
// 接收整数
System.out.println("整数数据:" + i);
} else {
// 输入错误的信息
System.out.println("输入的不是整数!");
}
System.out.print("请输入小数:");
if (scanner.hasNextFloat()) {
// 判断输入的是否是小数
f = scanner.nextFloat();
// 接收小数
System.out.println("小数数据:" + f);
} else {
// 输入错误的信息
System.out.println("输入的不是小数!");
}
}
}

public class ScannerPractice {
// 输入多个数字,并求其总和与平均数,每输入一个数字用回车确认,通过输入非数字来结束输入并输出执行结果:
public static void main(String[] args) {
System.out.println("请输入数字:");
Scanner scanner = new Scanner(System.in);
double sum = 0.0; // 和
int i = 0; // 输入数字的个数
while (scanner.hasNextDouble()){
double x = scanner.nextDouble();
i++;
}
System.out.println(i + "个数的和为" + sum);
System.out.println(i + "个数的平均值是" + (sum / i));
scanner.close();
}
}

二、 顺序结构
百度百科对顺序结构的定义是:顺序结构的程序设计是最简单的,只要按照解决问题的出现的先后顺序写出相应的语句就行,它的执行顺序是自上而下,依次执行。

三、选择结构
if 条件语句
-
if单选择结构 if...
我们很多时候需要判断一个东西是否可行,然后我们才去执行,这样一个过程在程序中用if语句来表示
if(布尔表达式) { //如果布尔表达式为true将执行的语句 } 实例: import java.util.Scanner; public class StructDemo { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("请输入内容:"); String str = scanner.nextLine(); // if 单选择 if (str.equals("hello")) // equals 判断是否相等;与 == 不同 { System.out.println(str); } System.out.println("End"); scanner.close(); } }

-
if双选择 ,if...else...
if(布尔表达式) { //如果布尔表达式为true将执行的语句 } else{ // 当 if 语句的布尔表达式值为 false 时,else 语句块会被执行} 实例: import java.util.Scanner; public class StructDemo { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); /* // if 单选择 System.out.println("请输入内容:"); String str = scanner.nextLine(); if (str.equals("hello")) // equals 判断是否相等;与 == 不同 { System.out.println(str); } */ // if...else... 双选择 // 考试分数大于(含)60分是及格,小于60分是不及格,输入一个分值,判断它是否及格 System.out.println("请输入分值:"); int score =scanner.nextInt(); if (score > 60 || score == 60){ System.out.println("成绩及格"); }else{ System.out.println("成绩不及格"); } System.out.println("End"); scanner.close(); } }

-
if多选择
if 语句后面可以跟 else if…else 语句,这种语句可以检测到多种可能的情况
使用 if,else if,else 语句的时候,需要注意下面几点:
- if 语句至多有 1 个 else 语句,else 语句在所有的 else if 语句之后
- if 语句可以有若干个 else if 语句,它们必须在 else 语句之前
- 一旦其中一个 else if 语句检测为 true,其他的 else if 以及 else 语句都将跳过执行
if(布尔表达式 1){
//如果布尔表达式 1的值为true执行代码
}else if(布尔表达式 2){
//如果布尔表达式 2的值为true执行代码
}else if(布尔表达式 3){
//如果布尔表达式 3的值为true执行代码
}else {
//如果以上布尔表达式都不为true执行代码
}
实例:
import java.util.Scanner;
public class StructDemo {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// if...else if...else 多选择
// 考试分数大于(含)90分是优秀,大于(含)75分是良好,大于(含)60分是及格,小于 60分是不及格,输入一个分值,判断它是哪个等级
System.out.println("请输入分值:");
int score =scanner.nextInt();
if (score <= 100 && score >= 90){
System.out.println("成绩优秀");
}
else if ( score < 90 && score >= 75) {
System.out.println("成绩良好");
}
else if ( score < 75 && score >= 60) {
System.out.println("成绩及格");
}
else if ( score < 60 && score >= 0) {
System.out.println("成绩不及格");
}
else {
System.out.println("成绩不合法");
}
System.out.println("End");
scanner.close();
}
}

- if 嵌套结构 你可以在另一个 if 或者 else if 语句中使用 if 或者 else if 语句。所谓套娃不过如此
if(布尔表达式 1){
////如果布尔表达式 1的值为true执行代码
if(布尔表达式 2){
////如果布尔表达式 2的值为true执行代码
}
}
switch case 语句
switch case 语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支。
switch case 语句有如下规则:
- switch 语句中的变量类型可以是: byte、short、int 或者 char。从 Java SE 7 开始,switch 支持字符串 String 类型了,同时 case 标签必须为字符串常量或字面量
- switch 语句可以拥有多个 case 语句。每个 case 后面跟一个要比较的值和冒号
- case 语句中的值的数据类型必须与变量的数据类型相同,而且只能是常量或者字面常量
- 当变量的值与 case 语句的值相等时,那么 case 语句之后的语句开始执行,直到 break 语句出现才会跳出 switch 语句。如果中间缺少break语句,则会出现case穿透现象
- 当遇到 break 语句时,switch 语句终止。程序跳转到 switch 语句后面的语句执行。case 语句不必须要包含 break 语句。如果没有 break 语句出现,程序会继续执行下一条 case 语句,直到出现 break 语句
- switch 语句可以包含一个 default 分支,该分支一般是 switch 语句的最后一个分支(可以在任何位置,但建议在最后一个)。default 在没有 case 语句的值和变量值相等的时候执行。default 分支不需要 break 语句
switch case 执行时,一定会先进行匹配,匹配成功返回当前 case 的值,再根据是否有 break,判断是否继续输出,或是跳出判断
switch(expression){
case value :
//语句
break; //可选
case value :
//语句
break; //可选
//你可以有任意数量的case语句
default : //可选
//语句
}
实例:
public class StructSwitchDemo {
public static void main(String[] args) {
char grade = 'B';
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;
default :
System.out.println("未知等级");
}
System.out.println("你的等级是 " + grade);
}
}

四、循环结构
顺序结构的程序语句只能被执行一次。如果您想要同样的操作执行多次,,就需要使用循环结构。
Java中有三种主要的循环结构:
- while 循环
- do…while 循环
- for 循环
在Java5中引入了一种主要用于数组的增强型for循环
while 循环结构
while是最基本的循环,它的结构为:
while( 布尔表达式 ) { //循环内容 }
-
只要布尔表达式为 true,循环就会一直执行下去
-
我们大多数情况下是会让循环停止下来的,这就需要一个表达式失效的方式来结束循环
-
少部分情况需要循环一直执行,比如服务器的请求响应监听等
-
循环条件一直为true就会造成死循环,我们正常的业务编程中应该避免死循环,它会影响程序性能或者造成程序卡死崩溃

do while 循环结构
对于 while 语句而言,如果不满足条件,则不能进入循环。但有时候我们需要即使不满足条件,也至少执行一次。
do…while 循环和 while 循环相似,不同的是,do…while 循环至少会执行一次。
do {
//代码语句
}while(布尔表达式);

- while 和 do...while 的区别
- while 先判断后执行,do...while 是先执行后判断
- do...while 能保证循环体至少被执行一次。这是它们的主要区别

for 循环结构
虽然所有循环结构都可以用 while 或者 do...while表示,但 Java 提供了另一种语句 —— for 循环,使一些循环结构变得更加简单。
for循环执行的次数是在执行前就确定的。语法格式如下:
for(初始化; 布尔表达式; 更新) { //代码语句 }
关于 for 循环有以下几点说明:
- 最先执行初始化步骤。可以声明一种类型,但可初始化一个或多个循环控制变量,也可以是空语句。
- 然后,检测布尔表达式的值。如果为 true,循环体被执行。如果为false,循环终止,开始执行循环体后面的语句。
- 执行一次循环后,更新循环控制变量。
- 再次检测布尔表达式。循环执行上面的过程。
声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配。其作用域限定在循环语句块,其值与此时数组元素的值相等。
表达式:表达式是要访问的数组名,或者是返回值为数组的方法。
public class StructForDemo {
public static void main(String[] args) {
for (int i = 1; i <= 5; i++){
System.out.println(i);
}
System.out.println("for循环结束!");
System.out.println("-------------------------------------------");
// 打印一个数组
int[] numbers = {10,20,30,40,50};
for (int l = 0; l <= numbers.length-1; l++)
{
System.out.println(numbers[l]);
}
System.out.println("-------------------------------------------");
for (int x:numbers){
System.out.println(x);
}
}
}

五、break&continue
break 主要用在循环语句或者 switch 语句中,用来强制跳出整个语句块。break 跳出最里层的循环,并且继续执行该循环下面的语句。
continue 适用于任何循环控制结构中。作用是让程序立刻跳转到下一次循环的迭代。在 for 循环中,continue 语句使程序立即跳转到更新语句。在 while 或者 do…while 循环中,程序立即跳转到布尔表达式的判断语句。
六、练习
public class MyPractice {
// 打印一个5行三角形
public static void main(String[] args) {
for (int i = 0; i < 5; i++) {
for (int j = 5; j >= i ;j--){
//System.out.print("*");
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();
}
}
}

------------恢复内容开始------------
Java流程控制
说明:1.我建了一个包,叫control,来存放这一章节的源码。2.Java学习观看了B站的UP主“遇见狂神说”的视频和网站菜鸟教程。3.插加入的图片通常是代码跑出来的结果。
一、用户交互Scanner
java.util.Scanner 是 Java5 的新特征,我们可以通过 Scanner 类来获取用户的输入
下面是创建 Scanner 对象的基本语法:
Scanner s = new Scanner(System.in);
通过 Scanner 类的 next() 与 nextLine() 方法获取输入的字符串,在读取前我们一般需要 使用 hasNext 与 hasNextLine 判断是否还有输入的数据
-
next() 与 nextLine() 区别
- next():
- 一定要读取到有效字符后才可以结束输入
- 对输入有效字符之前遇到的空白,next() 方法会自动将其去掉
- 只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符
- next() 不能得到带有空格的字符串
-
nextLine():
-
以Enter为结束符,也就是说 nextLine()方法返回的是输入回车之前的所有字符
-
可以获得空白
-
public class ScannerDemo {
public static void main(String[] args) {
// 创建一个扫描器对象,用于接收键盘数据
Scanner scanner = new Scanner(System.in);
System.out.println("请输入数据:");
// 判断用户有没有输入字符串
if (scanner.hasNext()){
// 使用next接收用户的输入
String str = scanner.next();
System.out.println("使用next输出的内容为:" + str);
}
/*可以输入空格
if (scanner.hasNextLine()){
String s = scanner.nextLine();
System.out.println("使用nextLine输入的内容为:"+s);
}
*/
// 凡是使用IO流的类,如果不关闭就会一直使用资源
scanner.close();
}
}

如果要输入 int 或 float 类型的数据,在 Scanner 类中也有支持,但是在输入之前最好先使用 hasNextXxx() 方法进行验证,再使用 nextXxx() 来读取:
public class ScannerDemo {
public static void main(String[] args) {
int i ;
float f ;
System.out.print("请输入整数:");
if (scanner.hasNextInt()) {
// 判断输入的是否是整数
i = scanner.nextInt();
// 接收整数
System.out.println("整数数据:" + i);
} else {
// 输入错误的信息
System.out.println("输入的不是整数!");
}
System.out.print("请输入小数:");
if (scanner.hasNextFloat()) {
// 判断输入的是否是小数
f = scanner.nextFloat();
// 接收小数
System.out.println("小数数据:" + f);
} else {
// 输入错误的信息
System.out.println("输入的不是小数!");
}
}
}

public class ScannerPractice {
// 输入多个数字,并求其总和与平均数,每输入一个数字用回车确认,通过输入非数字来结束输入并输出执行结果:
public static void main(String[] args) {
System.out.println("请输入数字:");
Scanner scanner = new Scanner(System.in);
double sum = 0.0; // 和
int i = 0; // 输入数字的个数
while (scanner.hasNextDouble()){
double x = scanner.nextDouble();
i++;
}
System.out.println(i + "个数的和为" + sum);
System.out.println(i + "个数的平均值是" + (sum / i));
scanner.close();
}
}

二、 顺序结构
百度百科对顺序结构的定义是:顺序结构的程序设计是最简单的,只要按照解决问题的出现的先后顺序写出相应的语句就行,它的执行顺序是自上而下,依次执行。

三、选择结构
if 条件语句
-
if单选择结构 if...
我们很多时候需要判断一个东西是否可行,然后我们才去执行,这样一个过程在程序中用if语句来表示
if(布尔表达式) { //如果布尔表达式为true将执行的语句 } 实例: import java.util.Scanner; public class StructDemo { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("请输入内容:"); String str = scanner.nextLine(); // if 单选择 if (str.equals("hello")) // equals 判断是否相等;与 == 不同 { System.out.println(str); } System.out.println("End"); scanner.close(); } }

-
if双选择 ,if...else...
if(布尔表达式) { //如果布尔表达式为true将执行的语句 } else{ // 当 if 语句的布尔表达式值为 false 时,else 语句块会被执行} 实例: import java.util.Scanner; public class StructDemo { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); /* // if 单选择 System.out.println("请输入内容:"); String str = scanner.nextLine(); if (str.equals("hello")) // equals 判断是否相等;与 == 不同 { System.out.println(str); } */ // if...else... 双选择 // 考试分数大于(含)60分是及格,小于60分是不及格,输入一个分值,判断它是否及格 System.out.println("请输入分值:"); int score =scanner.nextInt(); if (score > 60 || score == 60){ System.out.println("成绩及格"); }else{ System.out.println("成绩不及格"); } System.out.println("End"); scanner.close(); } }

-
if多选择
if 语句后面可以跟 else if…else 语句,这种语句可以检测到多种可能的情况
使用 if,else if,else 语句的时候,需要注意下面几点:
- if 语句至多有 1 个 else 语句,else 语句在所有的 else if 语句之后
- if 语句可以有若干个 else if 语句,它们必须在 else 语句之前
- 一旦其中一个 else if 语句检测为 true,其他的 else if 以及 else 语句都将跳过执行
if(布尔表达式 1){
//如果布尔表达式 1的值为true执行代码
}else if(布尔表达式 2){
//如果布尔表达式 2的值为true执行代码
}else if(布尔表达式 3){
//如果布尔表达式 3的值为true执行代码
}else {
//如果以上布尔表达式都不为true执行代码
}
实例:
import java.util.Scanner;
public class StructDemo {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// if...else if...else 多选择
// 考试分数大于(含)90分是优秀,大于(含)75分是良好,大于(含)60分是及格,小于 60分是不及格,输入一个分值,判断它是哪个等级
System.out.println("请输入分值:");
int score =scanner.nextInt();
if (score <= 100 && score >= 90){
System.out.println("成绩优秀");
}
else if ( score < 90 && score >= 75) {
System.out.println("成绩良好");
}
else if ( score < 75 && score >= 60) {
System.out.println("成绩及格");
}
else if ( score < 60 && score >= 0) {
System.out.println("成绩不及格");
}
else {
System.out.println("成绩不合法");
}
System.out.println("End");
scanner.close();
}
}

- if 嵌套结构 你可以在另一个 if 或者 else if 语句中使用 if 或者 else if 语句。所谓套娃不过如此
if(布尔表达式 1){
////如果布尔表达式 1的值为true执行代码
if(布尔表达式 2){
////如果布尔表达式 2的值为true执行代码
}
}
switch case 语句
switch case 语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支。
switch case 语句有如下规则:
- switch 语句中的变量类型可以是: byte、short、int 或者 char。从 Java SE 7 开始,switch 支持字符串 String 类型了,同时 case 标签必须为字符串常量或字面量
- switch 语句可以拥有多个 case 语句。每个 case 后面跟一个要比较的值和冒号
- case 语句中的值的数据类型必须与变量的数据类型相同,而且只能是常量或者字面常量
- 当变量的值与 case 语句的值相等时,那么 case 语句之后的语句开始执行,直到 break 语句出现才会跳出 switch 语句。如果中间缺少break语句,则会出现case穿透现象
- 当遇到 break 语句时,switch 语句终止。程序跳转到 switch 语句后面的语句执行。case 语句不必须要包含 break 语句。如果没有 break 语句出现,程序会继续执行下一条 case 语句,直到出现 break 语句
- switch 语句可以包含一个 default 分支,该分支一般是 switch 语句的最后一个分支(可以在任何位置,但建议在最后一个)。default 在没有 case 语句的值和变量值相等的时候执行。default 分支不需要 break 语句
switch case 执行时,一定会先进行匹配,匹配成功返回当前 case 的值,再根据是否有 break,判断是否继续输出,或是跳出判断
switch(expression){
case value :
//语句
break; //可选
case value :
//语句
break; //可选
//你可以有任意数量的case语句
default : //可选
//语句
}
实例:
public class StructSwitchDemo {
public static void main(String[] args) {
char grade = 'B';
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;
default :
System.out.println("未知等级");
}
System.out.println("你的等级是 " + grade);
}
}

四、循环结构
顺序结构的程序语句只能被执行一次。如果您想要同样的操作执行多次,,就需要使用循环结构。
Java中有三种主要的循环结构:
- while 循环
- do…while 循环
- for 循环
在Java5中引入了一种主要用于数组的增强型for循环
while 循环结构
while是最基本的循环,它的结构为:
while( 布尔表达式 ) { //循环内容 }
-
只要布尔表达式为 true,循环就会一直执行下去
-
我们大多数情况下是会让循环停止下来的,这就需要一个表达式失效的方式来结束循环
-
少部分情况需要循环一直执行,比如服务器的请求响应监听等
-
循环条件一直为true就会造成死循环,我们正常的业务编程中应该避免死循环,它会影响程序性能或者造成程序卡死崩溃

do while 循环结构
对于 while 语句而言,如果不满足条件,则不能进入循环。但有时候我们需要即使不满足条件,也至少执行一次。
do…while 循环和 while 循环相似,不同的是,do…while 循环至少会执行一次。
do {
//代码语句
}while(布尔表达式);

- while 和 do...while 的区别
- while 先判断后执行,do...while 是先执行后判断
- do...while 能保证循环体至少被执行一次。这是它们的主要区别

for 循环结构
虽然所有循环结构都可以用 while 或者 do...while表示,但 Java 提供了另一种语句 —— for 循环,使一些循环结构变得更加简单。
for循环执行的次数是在执行前就确定的。语法格式如下:
for(初始化; 布尔表达式; 更新) { //代码语句 }
关于 for 循环有以下几点说明:
- 最先执行初始化步骤。可以声明一种类型,但可初始化一个或多个循环控制变量,也可以是空语句。
- 然后,检测布尔表达式的值。如果为 true,循环体被执行。如果为false,循环终止,开始执行循环体后面的语句。
- 执行一次循环后,更新循环控制变量。
- 再次检测布尔表达式。循环执行上面的过程。
声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配。其作用域限定在循环语句块,其值与此时数组元素的值相等。
表达式:表达式是要访问的数组名,或者是返回值为数组的方法。
public class StructForDemo {
public static void main(String[] args) {
for (int i = 1; i <= 5; i++){
System.out.println(i);
}
System.out.println("for循环结束!");
System.out.println("-------------------------------------------");
// 打印一个数组
int[] numbers = {10,20,30,40,50};
for (int l = 0; l <= numbers.length-1; l++)
{
System.out.println(numbers[l]);
}
System.out.println("-------------------------------------------");
for (int x:numbers){
System.out.println(x);
}
}
}

五、break&continue
break 主要用在循环语句或者 switch 语句中,用来强制跳出整个语句块。break 跳出最里层的循环,并且继续执行该循环下面的语句。
continue 适用于任何循环控制结构中。作用是让程序立刻跳转到下一次循环的迭代。在 for 循环中,continue 语句使程序立即跳转到更新语句。在 while 或者 do…while 循环中,程序立即跳转到布尔表达式的判断语句。
六、练习
public class MyPractice {
// 打印一个5行三角形
public static void main(String[] args) {
for (int i = 0; i < 5; i++) {
for (int j = 5; j >= i ;j--){
//System.out.print("*");
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();
}
}
}

------------恢复内容结束------------
浙公网安备 33010602011771号