ループステートメントロジック
-
09-12-2019 - |
質問
1)使用する必要がある最初のループはdo / whileです。このループで、ユーザーは単語を入力するように求められます。ユーザーが間違った単語を入力した場合、エラーメッセージが表示されます。
無効!再試行する! 2台の試み!
無効!再試行する! 1台の試み!
申し訳ありません!これ以上試みが残っていません!
この出力は、毎回間違った単語が入力されている限り機能しますが、1回の失敗した後に正しい単語が入力されている場合は、エラーメッセージ を適用します。
2)の内側(ループの場合)誤った番号が3回または1回すべて入力されている場合、このループのこの部分は正常に動作します。 24はあらゆる試みに入力されます。
24の後に問題があるところにあります。出力は次のとおりです。
Blah Blahありがとう。あなたが勝者であれば5555555555であなたに電話します。 3 * 8= ここで、3 * 8が表示されてはいけません。私は休憩を入れることができることを理解しています。このステートメントの後、命令は具体的にはbreakコマンドを使用できないと言う。
正しい出力を読むべきです:ありがとうBlah Blah。あなたが勝者であれば5555555555であなたに電話します。
.
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
int attempt = 2;
int answer = 24;
long phoneNumber = 0;
String firstName = "";
String lastName = "";
String wordOfTheDay = "";
System.out.printf("Enter the word of the day: ");
wordOfTheDay = input.nextLine();
if(wordOfTheDay.equals("tired"))
{
for( attempt = 2; attempt >= 0; --attempt)
{
System.out.print(" 3 * 8 = ");
answer = input.nextInt();
input.nextLine();
if( answer == 24)
{
System.out.printf( "Please enter your first name, last name, and phone number (no dashes or spaces)\n" +"in a drawing for an all-expenses-paid vacation in the Bahamas: " );
firstName = input.next();
lastName = input.next();
phoneNumber = input.nextLong();
System.out.printf(
"Thank you %s %s. We'll call you at %d if you're a winner.",
firstName,
lastName,
+ phoneNumber);
}
else if( answer != 24)
{
if(attempt!=0)
{
System.out.printf( "Invalid! Try Again! %d attempt(s) left!\n ", attempt);
continue;
}
else
{
System.out.print( "Sorry! You have no more attempts left!" );
}
}
}
}
else
{
do
{
System.out.printf( "Invalid! Try Again! %d attempt(s) left!\n ", attempt);
--attempt;
System.out.printf("Enter the word of the day: ");
wordOfTheDay = input.nextLine();
} while (attempt >= 1);
if( attempt == 0)
{
System.out.print( "Sorry! You have no more attempts left!" );
}
}
}
私はこれを十分に明確にしたことを願っています。
リーカップするには、失敗した試みの後に正しい単語を入力しても問題を解決していない間に問題を解決する必要があります。
また、ユーザーが正しい入力を入力した後、3 * 8=表示されている3 * 8=表示される必要があります。
解決
通常、break
ステートメントを使用しますが、許可されていないため、attempt = -1
の設定は同じ効果があります。
if( answer == 24)
{
...
attempt = -1; // An ugly 'break'
}
.
編集:
do { } while();
をif
チェックの前に移動します。
// These two lines of code are no longer required.
//System.out.printf("Enter the word of the day: ");
//wordOfTheDay = input.nextLine();
do
{
System.out.printf("Enter the word of the day: ");
wordOfTheDay = input.nextLine();
if(!wordOfTheDay.equals("tired"))
{
System.out.printf(
"Invalid! Try Again! %d attempt(s) left!\n ", --attempt);
}
else
{
attempt = 0; // Another ugly 'break'
}
} while (attempt >= 1);
if(wordOfTheDay.equals("tired"))
{
}
// Remove else branch as not required.
. 他のヒント
あなたがこれをやろうとしていると思います。!
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int answer = 0;
long phoneNumber = 0;
String firstName = "";
String lastName = "";
String wordOfTheDay = "";
int mainMenuAttempt = 3;
do {
System.out.printf("Enter the word of the day: ");
wordOfTheDay = input.nextLine();
if (wordOfTheDay.equals("tired")) {
int answerAttempt = 3;
do {
System.out.print(" 3 * 8 = ");
answer = input.nextInt();
input.nextLine();
answerAttempt--;
if (answer != 24 && answerAttempt >0)
System.out.printf(
"Invalid! Try Again! %d attempt(s) left!\n ",
answerAttempt);
} while (answerAttempt >0 && answerAttempt < 3 && answer != 24);
if (answer == 24) {
System.out
.printf("Please enter your first name, last name, and phone number (no dashes or spaces)\n"
+ "in a drawing for an all-expenses-paid vacation in the Bahamas: ");
firstName = input.next();
lastName = input.next();
phoneNumber = input.nextLong();
System.out
.printf("Thank you %s %s. We'll call you at %d if you're a winner.",
firstName, lastName, +phoneNumber);
}
}
mainMenuAttempt--;
} while (mainMenuAttempt >0 && mainMenuAttempt < 3 && !wordOfTheDay.equals("tired") && answer!=24);
System.exit(0);
}
}
. それぞれ特定のことをする非常に小さい機能に全体を壊してみてください。たとえば、単語が正しいものであるかどうかをチェックするだけで、0がある場合は0を返し、またはそれがそうでない場合に行われた試行回数をチェックする機能があるかもしれません。
private int checkWord(String correctWord, String wordToCheck, int attempts)
{
if(wordToCheck.equals(correctWord))
{
return 0;
}
return attempts;
}
.
ユーザー入力を受けた機能を作成し、この機能を呼び出して上記入力を確認できます。その後、前の関数の戻りコードに依存しますエラーメッセージを出力できます。その後、関数はコードを返すためのコードを返します。
public int checkWordVerbose(String question, String correctWord, int attempts)
{
if(attempts <= 3)
{
Scanner scan = new Scanner(System.in);
System.out.print(question);
String input = scan.nextLine();
int failureCode = checkWord(correctWord, input, attempts);
if(failureCode == 0)
{
return 0;
}
else
{
System.out.println("Invalid! Attempts left: " + (3 - failureCode));
return 1;
}
}
else
{
System.out.println("Sorry! You have no more attempts left!\n");
return 2;
}
}
.
最後に、ループを含む単純に関数を作成し、そのループを保持するためのロジックを保持することができます。
public int checkWord(String correctWord)
{
int failureCode = 1;
int attempts = 1;
do
{
failureCode = checkWordVerbose("Enter the word of the day: ", correctWord, attempts);
attempts++;
} while(failureCode == 1);
return failureCode;
}
.
メインで、checkWord(String correctWord)
が返されたのかどうかを確認することは、他のチェックのために同じことを繰り返します(または同じ関数のいくつかを使用できる可能性さえあるかもしれません)。例:
if(checkWord("tired") == 0)
{
if(checkMath("24") == 0)
{
// Success!
}
}
. 何かが足りない限り、あなたは最初の入力を待っていて、それが間違っているならば、あなたはdo-whileループで進んで、そして入力が正しいならばもう一度チェックしないでください。
DO-WHILEループ内のIFを移動する必要があります。
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int attempt = 2;
int answer = 24;
long phoneNumber = 0;
String firstName = "";
String lastName = "";
String wordOfTheDay = "";
System.out.printf("Enter the word of the day: ");
wordOfTheDay = input.nextLine();
do {
if (wordOfTheDay.equals("tired")) {
for (attempt = 2; attempt >= 0; --attempt) {
System.out.print(" 3 * 8 = ");
answer = input.nextInt();
input.nextLine();
if (answer == 24) {
System.out
.printf("Please enter your first name, last name, and phone number (no dashes or spaces)\n"
+ "in a drawing for an all-expenses-paid vacation in the Bahamas: ");
firstName = input.next();
lastName = input.next();
phoneNumber = input.nextLong();
System.out
.printf("Thank you %s %s. We'll call you at %d if you're a winner.",
firstName, lastName, +phoneNumber);
}
else if (answer != 24) {
if (attempt != 0) {
System.out
.printf("Invalid! Try Again! %d attempt(s) left!\n ",
attempt);
continue;
} else {
System.out
.print("Sorry! You have no more attempts left!");
}
}
}
} else {
System.out.printf("Invalid! Try Again! %d attempt(s) left!\n ",
attempt);
System.out.printf("Enter the word of the day: ");
wordOfTheDay = input.nextLine();
if (!wordOfTheDay.equals("tired")) --attempt;
}
} while (attempt >= 1);
if (attempt == 0) {
System.out.print("Sorry! You have no more attempts left!");
}
System.exit(0);
}
. 正しい結果を得たら、ループから出る必要があります。これはbreak
ステートメントを使用して行われます。
if( answer == 24)
{
System.out.printf( "Please enter your first name, last name, and phone number (no dashes or spaces)\n" +"in a drawing for an all-expenses-paid vacation in the Bahamas: " );
firstName = input.next();
lastName = input.next();
phoneNumber = input.nextLong();
System.out.printf( "Thank you %s %s. We'll call you at %d if you're a winner.", firstName, lastName, + phoneNumber);
break;
// that's the break statement
}
. このコードは不完全ですが、必要なIDEがあります。試してみてください。
boolean firstry= true; ブールkeeplooping= true;
do
{
if(!firstTry){
System.out.printf( "Invalid! Try Again! %d attempt(s) left!\n ", attempt);
}
System.out.printf("Enter the word of the day: ");
wordOfTheDay = input.nextLine();
if(wordOfTheDay.equals("hey!")){
keepLooping = false;
}
--attempt;
} while (attempt >= 1 && keepLooping);
. ループから飛び出すためにユーザーが壊れたほうがあれば、ループを続けて "3 * 8="を印刷して入力を待ちます。 ブレークを使用していない場合は、ATTEMP= -1も意味があります。
if( answer == 24)
{
System.out.printf( "Please enter your first name, last name, and phone number (no dashes or spaces)\n" +"in a drawing for an all-expenses-paid vacation in the Bahamas: " );
firstName = input.next();
lastName = input.next();
phoneNumber = input.nextLong();
attempt = -1;
System.out.printf( "Thank you %s %s. We'll call you at %d if you're a winner.", firstName, lastName, + phoneNumber);
}
. ええと、明らかに外側のループを破る必要があります。
ifブロックの正解(つまり 'answer== 24')がある場合は、Boolean変数 'haveanswer'を 'true'に 'true'に初期化され、 'システムの前に外部ループをチェックインする.out.print( "3 * 8="); 'for' if(haveanswer){break;} '
enter code here`public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
int attempt = 2;
int answer = 24;
long phoneNumber = 0;
String firstName = "";
String lastName = "";
String wordOfTheDay = "";
System.out.printf("Enter the word of the day: ");
wordOfTheDay = input.nextLine();
if(wordOfTheDay.equals("tired"))
{
boolean haveAnswer = false;
for( attempt = 2; attempt >= 0; --attempt)
{
if (haveAnswer)
break;
System.out.print(" 3 * 8 = ");
answer = input.nextInt();
input.nextLine();
if( answer == 24)
{
System.out.printf( "Please enter your first name, last name, and phone number (no dashes or spaces)\n" +"in a drawing for an all-expenses-paid vacation in the Bahamas: " );
firstName = input.next();
lastName = input.next();
phoneNumber = input.nextLong();
System.out.printf( "Thank you %s %s. We'll call you at %d if you're a winner.", firstName, lastName, + phoneNumber);
haveAnswer = true;
break;
}
else if( answer != 24)
{
if(attempt!=0)
{
System.out.printf( "Invalid! Try Again! %d attempt(s) left!\n ", attempt);
continue;
}
else
{
System.out.print( "Sorry! You have no more attempts left!" );
}
}
}
}
else
{
do
{
System.out.printf( "Invalid! Try Again! %d attempt(s) left!\n ", attempt);
--attempt;
System.out.printf("Enter the word of the day: ");
wordOfTheDay = input.nextLine();
} while (attempt >= 1);
if( attempt == 0)
{
System.out.print( "Sorry! You have no more attempts left!" );
}
}
System.exit(0);
}
}
.