Java学习——流程控制篇

流程控制

Scanner与用户交互

public static void main(String[] args) {
        //创建扫描器对象,接收输入
        System.out.println("请输入:");
        Scanner s=new Scanner(System.in);
        //可以用next()或nextline()获取字符串
        //在获取之前何以用hasNext()或hasNextLine()进行判断
        if(s.hasNext()){
            String s1=s.next();
            System.out.println("next取得:"+s1);
        }

        //创建扫描器对象,接收输入
        System.out.println("请输入:");
        Scanner ss=new Scanner(System.in);
        //可以用next()或nextline()获取字符串
        //在获取之前何以用hasNext()或hasNextLine()进行判断
        if(s.hasNextLine()){
            String s1=ss.nextLine();
            System.out.println("nextLine取得:"+s1);
        }
        //IO类对象在使用结束之后关闭,节省资源
        ss.close();
    }

运行结果为:

![](file://C:\Users\xiaozhengtx\AppData\Roaming\marktext\images\2025-04-18-15-00-09-image.png?msec=1744959609238)

可以看到:

  • next()以空格为结束符,并且会自动去除有效字符前的空格

  • nextLine()以enter回车为结束符,可以识别带有空格的字符串

关于Scanner,它还有其他方法,对输入数据做出更为详细的判断:

  • hasNextInt与nextInt,获得整数数据

  • hasNextFloat与nextFloat,获得小数

  • ......

实训:

/**
 * 输入多个数字,求和以及其平均数
 * 如果每输入一个数字用回车确认
 * 如果输入非数字,直接输出结果
*/
//方法1:
public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);

        double sum=0;
        int num=0;
        while(scanner.hasNextLine()){
            if(scanner.hasNextInt()){
                sum+=scanner.nextInt();
                num+=1;
            }
            else if(scanner.hasNextLong()){
                sum+=(double)scanner.nextLong();
                num+=1;
            }
            else if(scanner.hasNextShort()){
                sum+=scanner.nextShort();
                num+=1;
            }
            else if(scanner.hasNextByte()){
                sum+=scanner.nextByte();
                num+=1;
            }
            else if(scanner.hasNextFloat()){
                sum+=scanner.nextFloat();
                num+=1;
            }
            else if(scanner.hasNextDouble()){
                sum+=scanner.nextDouble();
                num+=1;
            }
            else{
                break;
            }
        }
        System.out.println("和:"+sum);
        System.out.println("平均数:"+sum/num);
    }                                 
//方法2:
//这段代码过于冗长,只需要将while中的判断条件修改为hasNextDouble()即可去掉后续的判断语句

三大结构

顺序结构

  • Java的基本结构,从上到下,一句一句执行

判断结构

  • if单选择

  • if-else双选择

  • if-else if-else多选择结构

  • switch-case结构

    • 在case语句中若没有break;,会继续打印后续所有case中的语句

循环结构(避免死循环)

  • while循环结构:先判断,再运行

    • //输出1+2+...+100
      public static void main(String[] args) {
              int num=1;
              int sum=0;
              String s="";
              while(num<=100){
                  if(num==100){
                      s=s+num;
                  }else{
                      s=s+num+'+';
                  }
                  sum+=num++;
              }
              System.out.println(sum);
              System.out.println(s+'='+sum);
          }
      
  • DoWhile循环结构:先运行,再判断;循环体至少会被执行一次

  • for循环结构:循环次数在执行前就已经被确定

    • //计算0到100间的奇数和和偶数和
      public static void main(String[] args) {
              int oddSum=0;
              int evenSum=0;
              for(int i=0,j=1;i<=100&&j<100;i+=2,j+=2){
                  oddSum+=j;
                  evenSum+=i;
              }
              System.out.println("奇数和:"+oddSum);
              System.out.println("偶数和:"+evenSum);
      }
      //奇数和:2500
      //偶数和:2450
      
    • public static void main(String[] args) {
              //输出1-1000内能被5整除的数字,每3个1行
              int j=0;
              for (int i = 1; i <= 1000; i++) {
                  if(i%5==0){
                      System.out.print(i);
                      System.out.print(' ');//可以用'\t'代替
                      j++;
                  }
                  if(j==3){
                      j=0;
                      System.out.println('\n');//可以用  System.out.println()代替
                  }
              }
          }
      
    • public static void main(String[] args) {
              //打印九九乘法表
              for (int i = 1; i < 10; i++) {
                  for (int j = 1; j < 10&&j<=i; j++) {
                      System.out.print(j);
                      System.out.print('*');
                      System.out.print(i);
                      System.out.print('=');
                      System.out.print(i*j);
                      System.out.print('\t');
                  }
                  System.out.println();
              }
          }
      
    • 可用于数组或集合的增强for循环

      • public static void main(String[] args) {
                int[] numbers={10,20,30,40};
                for(int item:numbers){
                    item+=1;
                    System.out.println(item);
                }
            }
        

break和continue

  • break强制退出循环,跳出循环体

  • continue终止本次循环,进入下一次循环

练习

public static void main(String[] args) {
        //打印三角形,5行
        for (int i = 1; i <= 5; i++) {
            //先打印空格
            for (int i1 = 0; i1 < 5 - i; i1++) {
                System.out.print(" ");
            }
            //打印数字
            for (int i1 = 0; i1 < i-1; i1++) {
                System.out.print(i+" ");
            }
            System.out.print(i);
            //打印空格
            for (int i1 = 0; i1 < 5 - i; i1++) {
                System.out.print(" ");
            }
            System.out.println();
        }
    }
posted @ 2025-04-18 17:39  阿郑Zephyrine  阅读(16)  评论(0)    收藏  举报