Java流程控制

1. 用户交互Scanner(输入)

为了更好地实现人与程序的交互,我们可以用Scanner类来获取用户的输入

基本语法:

Scanner s = new Scanner(System.in);

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

next()
  • 一定要读取到有效字符后才可以结束输入。
  • 对输入有效字符之前遇到的空白,会自动过滤掉。
  • 输入有效字符后的空白作为分隔符或者结束符。
  • next()不能得到带有空格的字符串
import java.util.Scanner;

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

        Scanner scanner = new Scanner(System.in);//创建一个扫描器对象,用于接收用户输入的字符串

        System.out.println("使用scanner.next()输入数据:");

        if (scanner.hasNext()) {//判断用户是否输入字符串
            String s = scanner.next();//通过scanner输入字符串到s中
            System.out.println("scanner接收的字符串为:" + s);
        }

        scanner.close();//凡是属于IO流的类会占用资源,用完最好关掉

    }
}

JAVA实现控制台手动输入 java怎么控制输入_字符串

nextLine()
  • 以Enter为结束符。
  • 可以获得空白
import java.util.Scanner;

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

        Scanner scanner = new Scanner(System.in);

        System.out.println("使用scanner.nextLine()输入数据:");

        if (scanner.hasNextLine()) {//判断用户是否输入字符串
            String s = scanner.nextLine();//通过scanner输入字符串到s中
            System.out.println("scanner接收的字符串为:" + s);
        }

        scanner.close();//凡是属于IO流的类会占用资源,用完最好关掉

    }
}

JAVA实现控制台手动输入 java怎么控制输入_JAVA实现控制台手动输入_02

其他

类似的,可以用nextInt() , nextDouble() , next+数据类型() 等等,来输入相应的数据,用hasNext+对应的数据类型() 来判断是否输入成功。

练习:

A+B Problem

代码:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int a = scanner.nextInt();
        int b = scanner.nextInt();
        
        System.out.println(a + b);
        
        scanner.close();
    }
}

2. 顺序结构

Java的基本结构就是顺序结构,除非特别指明,否则就按照顺序一句一句执行。

3. 选择结构

  1. 单分支if
  2. 双分支if else
  3. 多分支else if
  4. 选择嵌套
  5. switch

冷知识:IDEA可以反编译class文件。

练习

luoguP5710 数的性质

代码:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int a = scanner.nextInt();

        boolean flag1 = (a % 2 == 0) ? true : false;
        boolean flag2 = (a > 4 && a <= 12) ? true : false;

        if (flag1 && flag2) {
            System.out.print("1 ");
        } else {
            System.out.print("0 ");
        }
        if (flag1 || flag2) {
            System.out.print("1 ");
        } else {
            System.out.print("0 ");
        }
        if ((flag1 && !flag2) || (!flag1 && flag2)) {
            System.out.print("1 ");
        } else {
            System.out.print("0 ");
        }
        if (!flag1 && !flag2) {
            System.out.print("1 ");
        } else {
            System.out.print("0 ");
        }

        scanner.close();
    }
}

4. 循环结构

  1. while循环
  2. do … while循环
  3. for循环

以上三种类型常规用法和C++相同。

练习

luoguP5720 一尺之棰

代码:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int a = scanner.nextInt();
        int day = 0;

        while(a != 0) {
            day++;
            a>>=1;
        }

        System.out.println(day);

        scanner.close();
    }
}
增强for循环

用来遍历数组中的每一个元素。
先看代码:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int[] numbers = {1, 2, 3, 4, 5};

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

        scanner.close();
    }
}

有点像Python里的for x in numbers。
它等同于下面这段代码:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int[] numbers = {1, 2, 3, 4, 5};

        for(int i = 0; i < 5; i++) {
            System.out.println(numbers[i]);
        }

        scanner.close();
    }
}

是常规for的一个简化版本。

5. break continue

  • break跳出整个循环
  • continue终止当前循环,开始下一次循环

6. debug

  1. 点击你想停住的代码语句左侧区域就会出现一个红色的小圆圈,代表成功设置断点。
  2. 点击运行右边的小蟑螂图标就可以开始调试,程序会在断点处停下。
  3. 点击向下的箭头进行单步调试。

    关于下面几个箭头:
  1. Step Over:跳到程序下一行,如果当前行为方法,则会执行完方法再跳到下一行。
  2. Step Into:跳到程序下一行,如果当前行为自定义方法,则会进入自定义方法。(不会进入官方类库方法)
  3. Force Step Into:跳到程序下一行,会进入任何方法。
  4. Step Out:当你调试时进入了一个方法,可以点击这个跳出当前方法,返回到被调用处的下一条语句(该方法已执行完毕)。