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循环中,该循环仅在
    noOfQuest
    为0时才存在。因此,如果它从未达到此值,循环将永远继续,这将导致您所说的挂起


    如果您系统地检查不同的离散值(1、2、3,…),请在其中放置一个if语句,该语句处理大于5的值,用于
    noOfQuest

    ,并使用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或大于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);
                        }
                    }