循环不退出
Loop not exiting
我得到了一段既过于复杂又严重低效的代码。我的任务是:
- 判断循环不退出的原因
重构此代码以提高效率。
do
{
if(noOfQuest<1)
{
System.out.println("FILE_ERROR: Please ensure line \"noOfEmails\" is more than 0");
}
if(noOfQuest==1)
{
if(iCount==0)
{
System.out.println("Count is on ["+iCount+"]");
System.out.println(prefinalMess);
System.out.println(questionArr[0]);
ansArray[0]=ans.next();
System.out.println("Answer 1 where question is ["+noOfQuest+"]" +ansArray[0]);
if(IsAnswer1Blank(ansArray)==true)
{
System.out.println("Please ensure you enter a response");
continue;
}
System.out.println(finalMess);
}
}
if(noOfQuest==2)
{
if(iCount==0)
{
System.out.println("Count is on ["+iCount+"]");
System.out.println(questionArr[0]);
ansArray[0]=ans.next();
if(IsAnswer1Blank(ansArray)==true)
{
System.out.println("Please ensure that you enter a response for question 1");
continue;
}
iCount++;
System.out.println(finalMess);
}
if(iCount==1)
{
System.out.println("Count is on ["+iCount+"]");
System.out.println(prefinalMess);
System.out.println(questionArr[1]);
ansArray[1]=ans.next();
if(IsAnswer2Blank(ansArray)==true)
{
System.out.println("Please ensure that you enter a response for question 2");
continue;
}
iCount++;
System.out.println(finalMess);
}
}
if(noOfQuest==3)
{
if(iCount==0)
{
System.out.println("Count is on [" +iCount+"]");
System.out.println(questionArr[0]);
ansArray[0]=ans.next();
if(IsAnswer1Blank(ansArray)==true)
{
System.out.println("Please ensure that you enter a response for question 1");
continue;
}
iCount++;
System.out.println(finalMess);
}
if(iCount==1)
{
System.out.println(questionArr[1]);
ansArray[1]=ans.next();
if(IsAnswer2Blank(ansArray)==true)
{
System.out.println("Please ensure that you have entered a response for question 2");
continue;
}
iCount++;
System.out.println(finalMess);
}
if(iCount==2)
{
System.out.println("Count is on ["+iCount+"]");
System.out.println(prefinalMess);
System.out.println(questionArr[2]);
ansArray[2]=ans.next();
if(IsAnswer3Blank(ansArray)==true)
{
System.out.println("Please ensure that you have entered a response for question 3");
continue;
}
iCount++;
System.out.println(finalMess);
}
}
if(noOfQuest==4)
{
if(iCount==0)
{
System.out.println("Count is on [" +iCount+"]");
System.out.println(questionArr[0]);
ansArray[0]=ans.next();
if(IsAnswer1Blank(ansArray)==true)
{
System.out.println("Please ensure that you enter a response for question 1");
continue;
}
iCount++;
System.out.println(finalMess);
}
if(iCount==1)
{
System.out.println("Count is on [" +iCount+"]");
System.out.println(questionArr[1]);
ansArray[1]=ans.next();
if(IsAnswer2Blank(ansArray)==true)
{
System.out.println("Please ensure that you have entered a response for question 2");
continue;
}
iCount++;
System.out.println(finalMess);
}
if(iCount==2)
{
System.out.println("Count is on ["+iCount+"]");
System.out.println(questionArr[2]);
ansArray[2]=ans.next();
if(IsAnswer3Blank(ansArray)==true)
{
System.out.println("Please ensure that you have entered a response for question 3");
continue;
}
iCount++;
System.out.println(finalMess);
}
if(iCount==3)
{
System.out.println("Count is on ["+iCount+"]");
System.out.println(prefinalMess);
System.out.println(questionArr[3]);
ansArray[3]=ans.next();
if(IsAnswer4Blank(ansArray)==true)
{
System.out.println("Please ensure that you have entered a response for question 3");
continue;
}
iCount++;
System.out.println(finalMess);
}
}
if(noOfQuest==5)
{
if(iCount==0)
{
System.out.println("Count is on [" +iCount+"]");
System.out.println(questionArr[0]);
ansArray[0]=ans.next();
if(IsAnswer1Blank(ansArray)==true)
{
System.out.println("Please ensure that you enter a response for question 1");
continue;
}
iCount++;
System.out.println(finalMess);
}
if(iCount==1)
{
System.out.println("Count is on [" +iCount+"]");
System.out.println(questionArr[1]);
ansArray[1]=ans.next();
if(IsAnswer2Blank(ansArray)==true)
{
System.out.println("Please ensure that you have entered a response for question 2");
continue;
}
iCount++;
System.out.println(finalMess);
}
if(iCount==2)
{
System.out.println("Count is on ["+iCount+"]");
System.out.println(questionArr[2]);
ansArray[2]=ans.next();
if(IsAnswer3Blank(ansArray)==true)
{
System.out.println("Please ensure that you have entered a response for question 3");
continue;
}
iCount++;
System.out.println(finalMess);
}
if(iCount==3)
{
System.out.println("Count is on ["+iCount+"]");
System.out.println(questionArr[3]);
ansArray[3]=ans.next();
if(IsAnswer4Blank(ansArray)==true)
{
System.out.println("Please ensure that you have entered a response for question 4");
continue;
}
iCount++;
System.out.println(finalMess);
}
if(iCount==4)
{
System.out.println("Count is on ["+iCount+"]");
System.out.println(prefinalMess);
System.out.println(questionArr[4]);
ansArray[4]=ans.next();
if(IsAnswer5Blank(ansArray)==true)
{
System.out.println("Please ensure that you have entered a response for question 5");
continue;
}
}
iCount++;
System.out.println(finalMess);
}
if(iCount==0)
{
if(noOfQuest==0)
{
System.out.println("FILE_ERROR: Please ensure line \"noOfQuest\" in file is between 1 and 5." + "\n" +
"File located: C:/Exercise 7 - Emails/configuration.properties");
}
iCount++;
if(noOfQuest>5)
{
System.out.println("FILE_ERROR: Please ensure line \"noOfQuest\" in file is between 1 and 5." + "\n" +
"File located: C:/Exercise 7 - Emails/configuration.properties");
}
iCount++;
}
if(iCount==1)
{
break;
}
break;
}
while(true);
当变量"noOfQuest"设置为“0”时,应用程序按预期关闭。但是,当变量设置为大于 5 时,应用程序会挂起。
我该如何解决这个问题?
编辑
我已经编辑了问题以包含我最终使用的答案,由 Lawrence Aiello 在下面建议(接受的答案)。
if(iCount==0)
{
if(noOfQuest==0 || noOfQuest>5)
{
System.out.println("FILE_ERROR: Please ensure line \"noOfQuest\" in file is greater than 0." + "\n" +
"File located: C:/Exercise 7 - Emails/configuration.properties");
System.exit(0);
}
}
重构为 for-nested do-while 循环以检查所有条件
因为你的程序处于一个无限循环中,只有当 noOfQuest
为 0 时才退出。因此,如果它永远不会达到这个值,循环将永远继续下去,这会导致你被挂起谈论.
在 noOfQuest
.
中放置一个处理大于 5 的值的 if 语句
如果您系统地检查不同的离散值(1、2、3,...),请使用 switch case 语句。还要添加一个默认路径,这样你就永远不会卡住。为您节省大量代码。
我遇到的一个简单的解决方案是以下代码:
if(iCount==0)
{
if(noOfQuest==0 || noOfQuest>5)
{
System.out.println("FILE_ERROR: Please ensure line \"noOfQuest\" in file is greater than 0." + "\n" +
"File located: C:/Exercise 7 - Emails/configuration.properties");
System.exit(0);
}
}
此部分检查 iCount 是否为 0(在运行时始终为 0)并检查问题数量是否为 0 或大于 5。如果是,它将打印消息并关闭应用程序,使用 "System.exit(0)".此命令关闭当前 JVM 会话。
我得到了一段既过于复杂又严重低效的代码。我的任务是:
- 判断循环不退出的原因
重构此代码以提高效率。
do { if(noOfQuest<1) { System.out.println("FILE_ERROR: Please ensure line \"noOfEmails\" is more than 0"); } if(noOfQuest==1) { if(iCount==0) { System.out.println("Count is on ["+iCount+"]"); System.out.println(prefinalMess); System.out.println(questionArr[0]); ansArray[0]=ans.next(); System.out.println("Answer 1 where question is ["+noOfQuest+"]" +ansArray[0]); if(IsAnswer1Blank(ansArray)==true) { System.out.println("Please ensure you enter a response"); continue; } System.out.println(finalMess); } } if(noOfQuest==2) { if(iCount==0) { System.out.println("Count is on ["+iCount+"]"); System.out.println(questionArr[0]); ansArray[0]=ans.next(); if(IsAnswer1Blank(ansArray)==true) { System.out.println("Please ensure that you enter a response for question 1"); continue; } iCount++; System.out.println(finalMess); } if(iCount==1) { System.out.println("Count is on ["+iCount+"]"); System.out.println(prefinalMess); System.out.println(questionArr[1]); ansArray[1]=ans.next(); if(IsAnswer2Blank(ansArray)==true) { System.out.println("Please ensure that you enter a response for question 2"); continue; } iCount++; System.out.println(finalMess); } } if(noOfQuest==3) { if(iCount==0) { System.out.println("Count is on [" +iCount+"]"); System.out.println(questionArr[0]); ansArray[0]=ans.next(); if(IsAnswer1Blank(ansArray)==true) { System.out.println("Please ensure that you enter a response for question 1"); continue; } iCount++; System.out.println(finalMess); } if(iCount==1) { System.out.println(questionArr[1]); ansArray[1]=ans.next(); if(IsAnswer2Blank(ansArray)==true) { System.out.println("Please ensure that you have entered a response for question 2"); continue; } iCount++; System.out.println(finalMess); } if(iCount==2) { System.out.println("Count is on ["+iCount+"]"); System.out.println(prefinalMess); System.out.println(questionArr[2]); ansArray[2]=ans.next(); if(IsAnswer3Blank(ansArray)==true) { System.out.println("Please ensure that you have entered a response for question 3"); continue; } iCount++; System.out.println(finalMess); } } if(noOfQuest==4) { if(iCount==0) { System.out.println("Count is on [" +iCount+"]"); System.out.println(questionArr[0]); ansArray[0]=ans.next(); if(IsAnswer1Blank(ansArray)==true) { System.out.println("Please ensure that you enter a response for question 1"); continue; } iCount++; System.out.println(finalMess); } if(iCount==1) { System.out.println("Count is on [" +iCount+"]"); System.out.println(questionArr[1]); ansArray[1]=ans.next(); if(IsAnswer2Blank(ansArray)==true) { System.out.println("Please ensure that you have entered a response for question 2"); continue; } iCount++; System.out.println(finalMess); } if(iCount==2) { System.out.println("Count is on ["+iCount+"]"); System.out.println(questionArr[2]); ansArray[2]=ans.next(); if(IsAnswer3Blank(ansArray)==true) { System.out.println("Please ensure that you have entered a response for question 3"); continue; } iCount++; System.out.println(finalMess); } if(iCount==3) { System.out.println("Count is on ["+iCount+"]"); System.out.println(prefinalMess); System.out.println(questionArr[3]); ansArray[3]=ans.next(); if(IsAnswer4Blank(ansArray)==true) { System.out.println("Please ensure that you have entered a response for question 3"); continue; } iCount++; System.out.println(finalMess); } } if(noOfQuest==5) { if(iCount==0) { System.out.println("Count is on [" +iCount+"]"); System.out.println(questionArr[0]); ansArray[0]=ans.next(); if(IsAnswer1Blank(ansArray)==true) { System.out.println("Please ensure that you enter a response for question 1"); continue; } iCount++; System.out.println(finalMess); } if(iCount==1) { System.out.println("Count is on [" +iCount+"]"); System.out.println(questionArr[1]); ansArray[1]=ans.next(); if(IsAnswer2Blank(ansArray)==true) { System.out.println("Please ensure that you have entered a response for question 2"); continue; } iCount++; System.out.println(finalMess); } if(iCount==2) { System.out.println("Count is on ["+iCount+"]"); System.out.println(questionArr[2]); ansArray[2]=ans.next(); if(IsAnswer3Blank(ansArray)==true) { System.out.println("Please ensure that you have entered a response for question 3"); continue; } iCount++; System.out.println(finalMess); } if(iCount==3) { System.out.println("Count is on ["+iCount+"]"); System.out.println(questionArr[3]); ansArray[3]=ans.next(); if(IsAnswer4Blank(ansArray)==true) { System.out.println("Please ensure that you have entered a response for question 4"); continue; } iCount++; System.out.println(finalMess); } if(iCount==4) { System.out.println("Count is on ["+iCount+"]"); System.out.println(prefinalMess); System.out.println(questionArr[4]); ansArray[4]=ans.next(); if(IsAnswer5Blank(ansArray)==true) { System.out.println("Please ensure that you have entered a response for question 5"); continue; } } iCount++; System.out.println(finalMess); } if(iCount==0) { if(noOfQuest==0) { System.out.println("FILE_ERROR: Please ensure line \"noOfQuest\" in file is between 1 and 5." + "\n" + "File located: C:/Exercise 7 - Emails/configuration.properties"); } iCount++; if(noOfQuest>5) { System.out.println("FILE_ERROR: Please ensure line \"noOfQuest\" in file is between 1 and 5." + "\n" + "File located: C:/Exercise 7 - Emails/configuration.properties"); } iCount++; } if(iCount==1) { break; } break; } while(true);
当变量"noOfQuest"设置为“0”时,应用程序按预期关闭。但是,当变量设置为大于 5 时,应用程序会挂起。 我该如何解决这个问题?
编辑
我已经编辑了问题以包含我最终使用的答案,由 Lawrence Aiello 在下面建议(接受的答案)。
if(iCount==0)
{
if(noOfQuest==0 || noOfQuest>5)
{
System.out.println("FILE_ERROR: Please ensure line \"noOfQuest\" in file is greater than 0." + "\n" +
"File located: C:/Exercise 7 - Emails/configuration.properties");
System.exit(0);
}
}
重构为 for-nested do-while 循环以检查所有条件
因为你的程序处于一个无限循环中,只有当 noOfQuest
为 0 时才退出。因此,如果它永远不会达到这个值,循环将永远继续下去,这会导致你被挂起谈论.
在 noOfQuest
.
如果您系统地检查不同的离散值(1、2、3,...),请使用 switch case 语句。还要添加一个默认路径,这样你就永远不会卡住。为您节省大量代码。
我遇到的一个简单的解决方案是以下代码:
if(iCount==0)
{
if(noOfQuest==0 || noOfQuest>5)
{
System.out.println("FILE_ERROR: Please ensure line \"noOfQuest\" in file is greater than 0." + "\n" +
"File located: C:/Exercise 7 - Emails/configuration.properties");
System.exit(0);
}
}
此部分检查 iCount 是否为 0(在运行时始终为 0)并检查问题数量是否为 0 或大于 5。如果是,它将打印消息并关闭应用程序,使用 "System.exit(0)".此命令关闭当前 JVM 会话。