我有以下代码,只要字母是“a”或“b”,它就会继续要求用户输入字母:
import java.util.Scanner;
public class Main
{
public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);
String letter;
System.out.print("Enter a letter: ");
letter = scan.nextLine();
while(letter.equals("a") || letter.equals("b"))
{
System.out.println("You entered: " + letter);
System.out.print("Enter a letter: ");
letter = scan.nextLine();
}
}
}
但是下面的代码重复了两次:
System.out.print("Enter a letter: ");
letter = scan.nextLine();
有没有办法让上面的代码只出现一次?
最佳答案
while (true) {
System.out.print("Enter a letter: ");
String letter = scan.nextLine();
if (!letter.equals("a") && !letter.equals("b"))
break;
System.out.println("You entered: " + letter);
}
这是循环的经典示例,它既不是自然的 while-do 也不是 do-while — 如果您想要相同的行为并减少代码重复,它需要从中间退出。
(另请注意,变量声明 letter
已移至内部范围,因为外部范围不再需要它。这是一个积极的小迹象。)
作为 while (true)
的替代方案,某些语言允许使用 for(;;)
中的退化 for 循环。
下面以更多的控制流逻辑为代价颠倒了条件循环退出测试的逻辑。
while (true) {
System.out.print("Enter a letter: ");
String letter = scan.nextLine();
if (letter.equals("a") || letter.equals("b")) {
System.out.println("You entered: " + letter);
continue;
}
break;
}
(它们在效率方面没有区别——它们在机器代码级别是等价的。)
关于java - 如何重写输入循环以不包含代码重复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72192193/