賞金將在 6 天后到期。此問題的答案有資格獲得 150聲望賞金。 user247763希望引起對這個問題的更多關注。
我有以下代碼,只要字母是“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();
有沒有辦法讓上面的代碼只出現一次?
uj5u.com熱心網友回復:
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;
}
(它們在效率方面沒有區別——它們在機器代碼級別是等價的。)
uj5u.com熱心網友回復:
簡單地
List<Character> expectedChars = new ArrayList<>();
expectedChars.add('a');
expectedChars.add('b');
while(!expectedChars.contains(line = scan.nextLine())) {
System.out.println("Not expected");
}
// Now has a expected char. Proceed.
uj5u.com熱心網友回復:
正如 Bobulous 所提到的,do-while 回圈是另一個簡單的解決方案。但是,如果復制條件對您來說仍然是一個交易破壞者,您還可以創建一個回傳布林值的函式,如果為真,則列印額外的文本。
public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);
String letter;
do
{
System.out.print("Enter a letter: ");
letter = scan.nextLine();
} while(inputIsAOrB(letter));
}
public static boolean inputIsAOrB(String input) {
if (input.equals("a") || input.equals("b"))
{
System.out.println("You entered: " input);
return true;
}
else
{
return false;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/473805.html
下一篇:如何檢查牌組中第一張面卡的位置?
