1846 字
9 分钟
流程控制

流程控制#

Scanner工具类的使用#

  1. 作用:能获得用户从控制台输入的数据,读取到程序中
  2. 使用Scanner:
//1. 创建Scanner的工具
//Scanner scanner 定义了一个scanner变量,类型是Scanner类型的
//new Scanner() new 是新建
//System.in是一个标准的输入流
Scanner s = new Scanner(System.in);
//2. 调用Scanner工具的功能(方法)
// nextInt功能:从控制台获得输入的数据,返回int值
// 程序将阻塞,当输入数据并回车后,就会解除阻塞
int i = s.nextInt();
System.out.println(i+1);
int j = s.nextInt();
System.out.println(j+1);

从控制台上输入的数据其实都是字符串,Scanner会根据调用的功能,对字符串进行解析,解析为指定的数据

  1. nextInt()
  2. nextDouble()
  3. next() 获取输入的字符串 ,不能获取到空格和回车
  4. nextLine() : 可以获取到空格和回车
  5. 获取字符:
Scanner s = new Scanner(System.in);
//获得字符
//获得字符串,获取字符串中的第一个字符
String str = s.next();
char c = str.charAt(0);

实例:

  1. 输入一个圆的半径(浮点),计算圆的面积
  2. 输入一个矩形的长和宽,计算周长

三目运算表达式#

语法: boolean表达式?值1:值2

解释:如果boolean表达式的结果是true,整个表达式的结果就是值1 ,如果是false,结果就是值2

实例:输入两个整数,输出最大的整数

条件语句#

if语句#

语法:

if(boolean表达式){

语句1

}else if(boolean表达式){

语句2

}else if(boolean表达式){

语句3

}else{

语句4

}

其中if可以单写,else if和 else必须要有if

Scanner scanner = new Scanner(System.in);
System.out.println("请输入星期(1~7):");
int week = scanner.nextInt();
if(week==1) {
System.out.println("升旗仪式");
}
else if(week==2){
System.out.println("下午放假");
}else if(week==3 || week==5){
System.out.println("上体育课");
}else if(week == 4){
System.out.println("上科学课");
}else{
System.out.println("放假");
}

switch语句#

语法:

switch(变量)

case 值1:

语句1

break;

case 值2:

语句2 break;

…

default:

语句;

使用switch的注意事项:

  1. switch比较的变量类型一定是int(自动向上转型为int) 或 String
  2. switch只能比较==的情况
  3. switch具有贯穿性:如果一个case满足了条件,后面的所有case中的语句都会执行,直到执行break结束
//输入星期几,上什么课
Scanner scanner = new Scanner(System.in);
System.out.println("请输入星期(1~7):");
int week = scanner.nextInt();
switch (week){
case 1:
System.out.println("升旗仪式");
break;
case 2:
System.out.println("下午放假");
break;
case 3:
case 5:
System.out.println("上体育课");
break;
case 4:
System.out.println("上科学课");
break;
default:
System.out.println("放假");
}

循环语句#

当我们要多次的执行一些相同的代码,将代码写在一个循环中

for循环#

语法:

for(初始化表达式; boolean表达式; 递增或递减表达式){语句}

  1. 先执行一次初始化表达式
  2. 判断boolean表达式是否是true,如果是true执行循环体的语句;如果是false则结束循环
  3. 执行递增递减表达式
  4. 2~3执行
//输出5次helloworld
for(int i = 1;i<=5;i++){
System.out.println("hello world");
}
//输出1~5数字
for (int i = 1; i <=5 ; i++) {
System.out.println(i);
}
//5~1数字
for (int i = 5; i >=1 ; i--) {
System.out.println(i);
}
//输出a~z
for(char i = 'a';i<='z';i++){
System.out.println(i);
}
//计算1~10数字的和
int sum = 0;
for (int i = 1; i <=10 ; i++) {
sum += i;
}
System.out.println(sum);
//计算1~10数字中偶数的和
sum = 0;
for (int i = 1; i <=10 ; i++) {
if((i&1)==0){
sum += i;
}
}
for (int i = 2; i <=10 ; i+=2) {
sum += i;
}
//实现死循环
for (; ; ) {
System.out.println("hello");
}

双层循环 : 循环体又是一个循环,如果外层循环执行n次,内层循环执行m次, 内层循环的代码一共会执行m*n

for (int i = 1; i <= 5 ; i++) {
for (int j = 1; j <=4 ; j++) {
System.out.println(i+","+j);
}
}

while循环#

语法:

while(boolean表达式){

语句

}

//输出1~5
int i = 1;
while(i<=5){
System.out.println(i);
i++;
}

如果清楚执行次数,用for可能会比较容易

如果只知道一个循环的条件,用while好一些

do…while循环#

语法:

do{

语句

}while(boolean表达式) ;

先执行一次循环体的语句,再判断while的boolean表达式的结果,如果是true则执行循环体。

do…while主要是为了解决while循环代码冗余问题的。

//贪吃蛇游戏 伪代码
随机食物节点的坐标
while(食物节点的坐标==蛇身所有节点坐标) {
随机食物节点的坐标
}
改为:
do {
随机食物节点的坐标
}while(食物节点的坐标==蛇身所有节点坐标);

控制循环的关键字#

  1. break

    当循环体中执行到break时,循环立刻结束,如果在多层循环中,立刻结束当前层的循环

    break后可以加循环点,结束指定的循环

for (int i = 1; i <=5 ; i++) {
if(i==2){
break;
}
System.out.println(i);
}
//
for (int i = 1; i <=5 ; i++) {
for (int j = 1; j <=5 ; j++) {
if(j==2){
//立刻结束当前层的循环
break;
}
System.out.println(i+","+j);
}
}
//循环点
a:for (int i = 1; i <=5 ; i++) {
b:for (int j = 1; j <=5 ; j++) {
if(j==2){
break a;
}
System.out.println(i+","+j);
}
}
  1. continue : 当循环执行到continue时,立刻结束本次循环;如果在多层循环中,立刻结束当前层的本次循环,也可以和循环点组合使用

循环的解题思路#

循环的总体思路#

  1. 穷举法 : 将问题的所有可能的答案一一列举,然后根据条件判断此答案是否合适,合适就保留,不合适就丢弃。
  2. 递推法:顺推和逆推 ,从已知条件出发,逐步推算出要解决问题的方法。

图形题循环思路#

图形题的循环基本都是二层循环。一层循环负责换行,二层循环负责每行的内容

例如:三角形

for (int i = 1; i <=5 ; i++) {
//打印每行的列内容
for (int j = 1; j <=i ; j++) {
System.out.print("*");
}
System.out.println();
}

例如:等边三角形 :

Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
for (int i = 1; i <=n ; i++) {
//打空格
for (int j = 0; j <=n-i ; j++) {
System.out.print(" ");
}
//打星
for (int j = 1; j <= 2*i -1 ; j++) {
System.out.print("*");
}
System.out.println();
}
for (int i = n-1; i >= 1 ; i--) {
//打空格
for (int j = 0; j <=n-i ; j++) {
System.out.print(" ");
}
//打星
for (int j = 1; j <= 2*i -1 ; j++) {
System.out.print("*");
}
System.out.println();
}

求质数(素数)问题#

质数 : 除了1和本身都不能整除的数

Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
//假定这个数是质数
boolean flag = true;
for (int i = 2 ; i <=n-1 ; i++) {
if(n%i==0){
flag= false;
break;
}
}
if(flag){
System.out.println(n+"是质数");
}else{
System.out.println(n+"不是质数");
}

计算100~200之间的质数

boolean flag = true;
for (int n = 100; n <= 200 ; n++) {
//假定这个数是质数
flag = true;
for (int i = 2 ; i <=n-1 ; i++) {
if(n%i==0){
flag= false;
break;
}
}
if(flag){
System.out.println(n+"是质数");
}else{
System.out.println(n+"不是质数");
}
}

计算一个数每个位上的数字#

Scanner scanner = new Scanner(System.in);
int i = scanner.nextInt();
int m = i;
//获取这个数的位数
int count = 0;
while(i!=0){
i/=10;
count++;
}
int k = 1;
for (int j = 0; j < count; j++) {
System.out.println(m/k%10);
k*=10;
}

Math工具使用#

//取绝对值
int i = -10;
int j = Math.abs(i);
System.out.println(j);
//开平方根
i = 16;
double d  = Math.sqrt(i);
System.out.println(d);
//判断一个数是否是完全平方数
System.out.println(Math.sqrt(i)%1.0==0);
//计算m的n次幂
System.out.println(Math.pow(3,5)); //3的5次幂
//四舍五入取整
System.out.println(Math.round(3.5));    //4
System.out.println(Math.round(-3.5));   //-3
流程控制
https://mizuki.mysqil.com/posts/3流程控制/
作者
SuifengFlying
发布于
2026-07-28
许可协议
CC BY-NC-SA 4.0

Java SE

3 / 13

Related articles

部分信息可能已经过时

封面
示例歌曲
示例艺术家
封面
示例歌曲
示例艺术家
0:00 / 0:00