Java流程控制
Scanner s = new Scanner(System.in);
通过Scanner类的next()与nextLine()方法获取输入的字符串,读取前一般使用hasNext()与hasNextLine()判断是否还有输入的数据
next():
-
一定要读取到有效字符后才可以结束输入
-
对输入有效字符之前遇到的空白,next()方法将其自动去掉
-
只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符
-
next()不能得到带有空格的字符串
package scanner;
import java.util.Scanner;
public class Demo01 {
public static void main(String[] args) {
//创建一个Scanner对象,用于接收键盘数据
Scanner scanner = new Scanner(System.in); //Hello World!
System.out.println("使用next方式接收:");
//判断用户有没有输入字符串
if(scanner.hasNext()) {
String str = scanner.next();
System.out.println(str); //Hello
}
//凡是属于IO流的类如果不关闭会一直占用资源,应该用完就关掉
scanner.close();
}
}
nextLine():
-
以Enter为结束符,也就是说nextLine()方法返回的是输入回车之前的所有字符
-
可以获得空白
package scanner;
import javax.sound.midi.Soundbank;
import java.util.Scanner;
public class Demo02 {
public static void main(String[] args) {
//从键盘接收数据
Scanner scanner = new Scanner(System.in); //Hello World!
System.out.println("使用nextLine方式接收:");
//判断是否还有输入
if(scanner.hasNextLine()) {
String str = scanner.nextLine();
System.out.println(str); //Hello World!
}
scanner.close();
}
}
package 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("输入的不是小数数据!");
}
scanner.close();
}
}
package 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 += 1;
sum += x;
}
System.out.println(m+"个数的和是:"+sum);
System.out.println(m+"个数的平均值是:"+(sum/m));
scanner.close();
}
}
顺序结构
Java的基本结构就是顺序结构,除非特别指明,否则按照顺序一句一句执行。它是任何一种算法都离不开的基本算法结构
选择结构
if单选择结构
if(布尔表达式) {
//如果布尔表达式为true将执行的语句
}
if双选择结构
if(布尔表达式) {
//如果布尔表达式为true将执行的语句
} else {
//如果布尔表达式为false将执行的语句
}
package struct;
import java.util.Scanner;
public class Demo01 {
public static void main(String[] args) {
//考试分数大于60则及格,否则不及格
Scanner scanner = new Scanner(System.in);
System.out.println("请输入成绩:");
int score = scanner.nextInt();
if(score > 60) {
System.out.println("及格");
} else {
System.out.println("不及格");
}
scanner.close();
}
}
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(expression) {
case value:
//语句
break;
case value:
//语句
break;
default:
//语句
}
switch语句中的变量类型可以是:byte,short,int,char,从Java SE 7 开始,switch支持字符串String类型。case标签必须为字符串常量或字面量
循环结构
while循环
while(布尔表达式) {
//循环内容
}
只要布尔表达式为true,循环就会一直执行下去
我们大多数情况需要循环停止下来,需要一个让表达式失效的方式来结束循环
少部分情况需要循环一直执行,比如服务器的请求响应监听等
循环条件一直为true会造成死循环,正常业务中应尽量避免死循环,因为会影响程序性能或造成程序卡死崩溃
package struct;
public class Demo02 {
public static void main(String[] args) {
//输出1-100
int i = 0;
while(i < 100) {
i++;
System.out.println(i);
}
}
}
package struct;
public class Demo03 {
public static void main(String[] args) {
//计算1+2+···+100
int i = 0;
int sum = 0;
while(i < 100) {
i++;
sum += i;
}
System.out.println(sum);
}
}
do……while循环
do {
//代码语句
}while(布尔表达式);
while语句:如果不满足条件,不能进入循环
do…while语句:即使不满足条件,也至少执行一次
package struct;
public class Demo04 {
public static void main(String[] args) {
//计算1+2+···+100
int i = 0;
int sum = 0;
do {
i++;
sum += i;
}while(i < 100);
System.out.println(sum);
}
}
for循环
for(初始化;布尔表达式;更新) {
//代码语句
}
for循环是最有效,最灵活的循环结构
package struct;
public class Demo05 {
public static void main(String[] args) {
int a = 1; //初始化条件
while(a <= 100) { //条件判断
System.out.println(a); //循环体
a += 2; //迭代
}
System.out.println("while循环结束!");
for (int i = 1; i <= 100; i++) {
System.out.println(i);
}
System.out.println("for循环结束!");
}
}
package struct;
public class Demo06 {
public static void main(String[] args) {
//输出1-1000之间能被5整除的数,且每行输出3个
for (int i = 1; i <= 1000; i++) {
if(i%5 == 0) {
System.out.print(i+"\t");
}
if(i%15 == 0) {
System.out.println();
}
}
}
}
package struct;
public class Demo07 {
public static void main(String[] args) {
//打印九九乘法表
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
System.out.print(j+"*"+i+"="+i*j+"\t");
}
System.out.println();
}
}
}
增强for循环
package struct;
public class Demo08 {
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);
}
}
}
break & continue
break用于强行退出循环,不执行循环中剩余的语句(break也可在switch中使用)
continue语句终止某次循环过程,接着判定下一次循环是否执行
练习
package struct;
public class Test {
public static void main(String[] args) {
//打印三角形 5行
for (int i = 0; i < 5; i++) {
for (int j = 5; j >= i; j--) {
System.out.print(" ");
}
for (int j = 1; j <= 2*i+1; j++) {
System.out.print("*");
}
System.out.println();
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!