我有以下代码,它继续要求用户输入字母,只要该字母是“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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
但下面的代码重复了两次:
System.out.print("Enter a letter: ");
letter = scan.nextLine();
Run Code Online (Sandbox Code Playgroud)
有没有办法让上面的代码只出现一次?
Eri*_*idt 10
while (true) {\n System.out.print("Enter a letter: ");\n String letter = scan.nextLine();\n if (!letter.equals("a") && !letter.equals("b"))\n break;\n System.out.println("You entered: " + letter);\n }\nRun Code Online (Sandbox Code Playgroud)\n这是循环的经典示例,它既不是自然的 while-do 也不是 do-while \xe2\x80\x94,如果您想要相同的行为并减少代码重复,它需要从中间退出。
\n(另请注意变量声明letter已移至内部作用域,因为外部作用域不再需要它。\xc2\xa0 这是一个小的积极指示。)
作为某些语言的替代方案,while (true)允许退化 for 循环,如下所示for(;;).
下面反转了条件循环退出测试的逻辑,但牺牲了更多的控制流逻辑。
\n while (true) {\n System.out.print("Enter a letter: ");\n String letter = scan.nextLine();\n if (letter.equals("a") || letter.equals("b")) {\n System.out.println("You entered: " + letter);\n continue;\n }\n break;\n }\nRun Code Online (Sandbox Code Playgroud)\n(在效率方面,这些之间没有区别 \xe2\x80\x94 这些在机器代码级别上是等效的。)
\n小智 6
import java.util.Scanner;
public class Main
{
public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);
String letter;
do{
System.out.print("Enter a letter: ");
letter = scan.nextLine();
System.out.println("You entered: " + letter);
}while(letter.equals("a") || letter.equals("b"));
}
}
Run Code Online (Sandbox Code Playgroud)
它将首先循环一次,如果语句为真,则再次继续。