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流的类会占用资源,用完最好关掉
}
}
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流的类会占用资源,用完最好关掉
}
}
其他
类似的,可以用nextInt() , nextDouble() , next+数据类型() 等等,来输入相应的数据,用hasNext+对应的数据类型() 来判断是否输入成功。
练习:
代码:
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. 选择结构
- 单分支if
- 双分支if else
- 多分支else if
- 选择嵌套
- switch
冷知识:IDEA可以反编译class文件。
练习
代码:
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. 循环结构
- while循环
- do … while循环
- for循环
以上三种类型常规用法和C++相同。
练习
代码:
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
- 点击你想停住的代码语句左侧区域就会出现一个红色的小圆圈,代表成功设置断点。
- 点击运行右边的小蟑螂图标就可以开始调试,程序会在断点处停下。
- 点击向下的箭头进行单步调试。
关于下面几个箭头:
- Step Over:跳到程序下一行,如果当前行为方法,则会执行完方法再跳到下一行。
- Step Into:跳到程序下一行,如果当前行为自定义方法,则会进入自定义方法。(不会进入官方类库方法)
- Force Step Into:跳到程序下一行,会进入任何方法。
- Step Out:当你调试时进入了一个方法,可以点击这个跳出当前方法,返回到被调用处的下一条语句(该方法已执行完毕)。