Java 循环未退出
我得到了一段既过于复杂又效率极低的代码。我的任务是:Java 循环未退出,java,loops,Java,Loops,我得到了一段既过于复杂又效率极低的代码。我的任务是: 确定循环不退出的原因 重新考虑此代码,使其更高效 do { if(noOfQuest<1) { System.out.println("FILE_ERROR: Please ensure line \"noOfEmails\" is more than 0"); } if(n
- 确定循环不退出的原因
- 重新考虑此代码,使其更高效
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);
重构为for嵌套的do while循环以检查所有条件,因为您的程序处于无限while循环中,该循环仅在
为0时才存在。因此,如果它从未达到此值,循环将永远继续,这将导致您所说的挂起noOfQuest
如果您系统地检查不同的离散值(1、2、3,…),请在其中放置一个if语句,该语句处理大于5的值,用于
,并使用switch case语句。同时添加一个默认路径,这样您就不会被卡住。节省了大量代码。我遇到的一个简单解决方案是以下代码:noOfQuest
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或大于5。如果是,它将打印消息并使用“System.exit(0)”关闭应用程序。此命令将关闭当前JVM会话。当您发现自己一次又一次地复制一段代码时,是时候重构了!也许您可以在运行时将循环更改为do{…}(noOfQuests@alfasin不幸的是,对于这个练习来说,重构不是一个选项,但很好idea@Keppil很好的建议,但已经尝试过了,我的条件句在DrewKennedy时间内无法100%使用健康药水,或者从checkpoint加载?就像我上面写的,有很多事情可以做:中断、返回、抛出异常等等。
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); } }