java的流程控制

java的流程控制

用户交互的Scanner

实现人机交互,通过Scanner类来获取用户的输入

基本语法:

Scanner s = new Scanner(System.in)

通过Scanner类的next()与nextLine()方法来获取输入的字符串,在读取前我们一般需要,使用hasNext()与hasNextLine()判断是否还有输入的数据

import java.util.Scanner;

public class Demo07 {
    public static void main(String[] args) {

        //创建scaner对象,用于接收键盘数据
        /*
        使用next()与nextline()方法接收是有区别的
        1.next():   一定要读取到有效字符才可以结束输入
                      对输入的有效字符之前遇到的空白,next()方法1会自动将其去掉
                      只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符
                      next()不能得到带有空格的字符串


          2.nextLine()  :   以enter为结束符,也就是说nextline()方法返回的是输入回车前的所有字符

                              可以获得空白

         */
        Scanner scanner = new Scanner(System.in);
        System.out.println("请用nextline()接收:");
        if (scanner.hasNext()){
            String str = scanner.nextLine();
            System.out.println("输出内容为:"+ str);
        }
        //一般使用scanner对象后,需要使用scaner.close()方法关闭
        scanner.close();


    }
}

//Scanner的进阶使用
import java.util.Scanner;

public class Demo07{
    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;
            sum = sum + x;
            System.out.println("你输入了第"+m+"个数据,然后当前结果sum="+sum);
        }
        System.out.println(m+"个数的和为:"+sum);
        System.out.println(m + "个数的平均值是" + (sum/m));
    }
}

while 循环中,scanner.hasNextDouble()scanner.nextDouble() 的配合使得每次循环读取到的 double 值会被累加到 sum 中,并且 m 变量会记录输入的数据个数。这样,每次循环的累积结果会影响到下一次循环的输出。具体原因如下:

  1. 变量作用域:在 while 循环体内声明和修改的变量(如 summ)是循环外部变量的引用,这意味着它们在每次循环迭代中会保持上一次迭代的值。
  2. 累加机制
    • sum 用于累加输入的所有 double 值,因此每次读取新的 double 值后,它都会被加到 sum 上,更新了 sum 的值。
    • m 记录了输入的数据个数,每次循环时 m 增加 1,以保持对输入数据数量的跟踪

选择结构

if(布尔表达式){
    //如果布尔表达式为true则执行语句
}
if的多选择结构
if(布尔表达式){
    //如果布尔表达式为true则执行语句
}else if(布尔表达式){
    //如果布尔表达式为true则执行语句
}else{
    
}

switch选择结构

switch(expression){
    case value :
    //语句
     break;
    case value :
      break;
    //你可以选择任意数量的case语句
    default : //可选
        //语句
}

循环结构

while循环

while(布尔表达式){
    //循环内容
}//只要布尔表达式为true,循环就会一直循环下去

do while循环

do{
    //布尔表达式
}while(布尔表达式);

while与do while 的区别

  1. while 先判断后执行,do while是先执行后判断
  2. do while z总是保证循环体被执行一次

for 循环

for(初始化值;布尔表达式;更新){
    //代码语句
}

for循环的快捷输入,直接输入要循环的次数,比如100.for输入就能自动帮你形成循环100次的语句体

可以尝试以下练习:

public class Demo11 {
    public static void main(String[] args) {
        //练习1:计算0到100之间的奇数和与偶数和
        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);

    }
}
public class Demo12 {
    public static void main(String[] args) {
        int count = 0; // 计数器,用于每行输出的数目
        
        for (int i = 1; i <= 1000; i++) {
            if (i % 5 == 0) {
                System.out.print(i + "\t");
                count++;
                
                if (count % 3 == 0) {
                    System.out.println();
                }
            }
        }
    }
}
/**
public class Demo12 {
    public static void main(String[] args) {
        //用while或者for循环输出1-1000之间能被5整除的数,并且每行输出3个
        for (int i = 0; i < 1000; i++) {
            if (i % 5 == 0){
                System.out.print(i + "\t");
            }
            if (i%(5*3)==0){
                System.out.println();
            }

        }
    }
}*/
  • 变量 count 用于跟踪每行输出的数字数量。
  • if (i % 5 == 0) 检查数字是否能被 5 整除。
  • 每当 count 达到 3 的倍数时,打印一个换行符以开始新的一行。

用for循环打印99乘法表

public class Demo13 {
    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+"="+(j*i) + "\t");

            }
            System.out.println();
        }


    }
}

解释:先用外循环for打印行数,再用内循环打印列数,当j=1时,进入第一次循环,执行内循环


  1. 初始化
    • j 被初始化为 1,开始外循环。
  2. 第一层循环(外循环):
    • j = 1 时,进入内循环。
  3. 第二层循环(内循环):
    • i 在这里被初始化为 1。
    • 判断条件 i <= j(此时 i = 1, j = 1)为真。
    • 执行乘法运算并输出结果,即 1*1=1
    • 内循环结束后,i 自增 1,此时 i = 2
  4. 退出内循环
    • 检查 i <= j 的条件,现在 i = 2j = 1,条件为假。
    • 由于 i 不再小于或等于 j,内循环结束。
  5. 执行换行
    • 完成内循环的输出后(也就是一行的输出),执行换行语句以开始下一行的输出。

每次退出内循环,i都会从1重新开始

练习
public class Demo14 {
    public static void main(String[] args) {
        //打印1011到150之间的所有质数
        //质数是指在大于1,除了1和它本身以外不再有其他因数的自燃数
        int count = 0;
        outer:for (int i =101;i<150;i++){
            for (int j = 2; j < i/2; j++) {
                if (i % j ==0){
                    continue outer;
                }

            }
            System.out.println(i+" ");
        }
    }
}
//外层循环遍历101到149之间的每个数字。
//内层循环检查当前数字i是否可以被2到i/2之间的任何数字整除。如果能整除,则i不是质数,跳过当前循环的外层循环继续下一个i。
//如果i不能被2到i/2之间的任何数字整除,则i是质数,打印出来。
//注意:i < i/2 应改为 j <= i/2 以确保能正确判断质数。
打印三角形练习
public class Demo15 {
    public static void main(String[] args) {
        for (int i = 1; i <= 50; i++) {
            for(int j = 50;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();

        }
    }
}

这段代码打印了一个由星号(*)组成的三角形图案。具体来说:

  1. 外层的 for 循环控制行数,共有 50 行。
  2. 第一个内层 for 循环打印前导空格,使星号居中对齐。
  3. 第二个内层 for 循环打印前半部分的星号。
  4. 第三个内层 for 循环打印后半部分的星号。

因此,它在控制台输出的将是一个左右对称的三角形图案。

增强for循环

增强 for 循环(也称为 “for-each” 循环)是一种简化遍历集合或数组的方式。它的语法如下:

for (type variable : collection) {
    // 使用 variable
}

public class Example {
    public static void main(String[] args) {
        int[] numbers = {1, 2, 3, 4, 5};

        for (int number : numbers) {
            System.out.println(number);
        }
    }
}

在这个例子中,number 变量依次取 numbers 数组中的每个值,从而打印出数组的所有元素。增强 for 循环简化了遍历过程,但不允许在遍历过程中修改集合或数组。

break continue

  1. break在任何循环语句的主体部分,均可用break控制循环的流程,break用于强行退出循环,不执行循环中剩余的语句
  2. continue语句用于循环体中,用于终止某次循环过程,即跳过循环体中未执行的语句,接着进行下一次是否执行循环的语句

break:

public class BreakExample {
    public static void main(String[] args) {
        for (int i = 1; i <= 10; i++) {
            if (i == 5) {
                break; // 当 i 等于 5 时,退出循环
            }
            System.out.println(i);
        }
        System.out.println("Loop exited.");
    }
}


输出

continue:

public class ContinueExample {
    public static void main(String[] args) {
        for (int i = 1; i <= 10; i++) {
            if (i % 2 == 0) {
                continue; // 跳过当前迭代,继续下一次循环
            }
            System.out.println(i);
        }
    }
}

输出

}

}


**输出**

[外链图片转存中...(img-LNEZeDjV-1726315891613)]

**continue:**

```java
public class ContinueExample {
    public static void main(String[] args) {
        for (int i = 1; i <= 10; i++) {
            if (i % 2 == 0) {
                continue; // 跳过当前迭代,继续下一次循环
            }
            System.out.println(i);
        }
    }
}

输出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值