为什么我的while循环不起作用而忽略代码?

时间:2016-10-29 23:56:17

标签: java

所以,我想要做的是让我的while循环根据不同的关键词做不同的事情。我想要的是,当我键入yes时,我希望它退出程序,当我输入no时,为了打印新歌,如果有拼写错误,则弹出一条消息并允许用户重新输入yes或no以打印相同的歌曲。我根据这三个命令打印出4或5首歌曲。在我最后的while循环中。我想让它在每次用户类型继续时重复播放歌曲,并在用户键入yes时结束。如果出现拼写错误,我希望在提示用户再次输入的地方发生同样的事情。这之前有效,现在却没有。当我拼写错误时,它会提示我再次输入,但不会在该循环中打印出该歌曲。它会将我发送到最后一个while循环,忽略其间的所有代码。最后一个循环只能识别拼写错误,是的,不是继续,即使之前也是如此。

这是一个歌曲循环和我的最后一个循环:

import java.io.*;
import java.util.*;
public class FullNurseryRhymes
{
   public static void main(String[] args)
   {
       Scanner input = new Scanner(System.in);
       String aBCs, neverEnds, frogs, frogs2, monkeys, hdd, hdd2;

       NurseryRhymes rhymes = new NurseryRhymes(); 
    {
           System.out.println("Is the baby asleep? yes\\no");
           frogs=input.next();

           int byeFrog = 2;
           for(int i = 3; i >= 1; i--)
           {
              if (frogs.equalsIgnoreCase("no"))
              {
                 System.out.print(i + " " + rhymes.getFrogs());
                 System.out.println(" " + byeFrog + " " + rhymes.getFrogs2());
                 byeFrog -= 1;
              }
              else if (frogs.equalsIgnoreCase("yes"))
              {
                 System.out.println("The baby is asleep");
                 System.exit(0);
              }
              while(!frogs.equalsIgnoreCase("no"))
              {
                 System.out.println("Non requested input, please retry.");
                 System.out.println("\nIs the baby asleep? continue\\yes");
                 frogs = input.next();
                 if(frogs.equalsIgnoreCase("no"))
                  {
                      System.out.print(i + " " + rhymes.getFrogs());
                      System.out.println(" " + byeFrog + " " + rhymes.getFrogs2());
                      byeFrog -= 1;
                  } 
                  else if (frogs.equalsIgnoreCase("yes"))
                  {
                      System.out.println("The baby is asleep");
                      System.exit(0);
                  }
              }
           }
          }   


    //last loop 
         {
           System.out.println("Is the baby asleep? continue\\yes");
           neverEnds = input.next();
           while(neverEnds.equalsIgnoreCase("continue"))
           {
               System.out.println(rhymes.getNeverEnds());
               System.out.println("Is the baby asleep? continue\\yes");
               neverEnds = input.next();
           }
           if(neverEnds.equalsIgnoreCase("yes"))
           {
               System.out.println("The baby is asleep");
               System.exit(0);
           }
           while(!neverEnds.equalsIgnoreCase("continue")||!neverEnds.equalsIgnoreCase("yes"))
           {
                System.out.println("Non requested input, please retry");
                System.out.println("\nIs the baby asleep? continue\\yes");
                neverEnds = input.next();
                while (neverEnds.equalsIgnoreCase("continue"))
                   {
                       System.out.println(rhymes.getNeverEnds());
                       System.out.println("Is the baby asleep? continue\\yes");
                       neverEnds = input.next();
                       if(neverEnds.equalsIgnoreCase("yes"))
                       {
                           System.out.println("The baby is asleep");
                           System.exit(0);
                       }
                   }
                if (neverEnds.equalsIgnoreCase("yes"))
                   {
                       System.out.println("The baby is asleep");
                       System.exit(0);
                   }
           }
           }  

2 个答案:

答案 0 :(得分:0)

根据评论,听起来有太多(可能)相关的代码供我们使用。

有三种方法可以解决这个问题。

  • 您可以在IDE中学习如何使用调试器。使用断点和单步执行,找出错误的位置。

  • 您可以注释掉部分代码以追踪问题所在。这也可以帮助您创建MCVE

  • 您可以通过将常用/重复代码重构为方法来简化代码。例如"最后一个循环"部分非常重复。

最后一点,在解决了可以作为方法实现的公共代码之后,抛弃这些代码并重新开始实际上可能不那么重要了。

答案 1 :(得分:-3)

你的问题有点长。我们不需要一个故事,只是解释你的问题和一些代码,而不是你的全班。尝试将while循环放在外面。在while循环外面有一个名为babySleep的字符串,以" no"开头。然后,while(babySleep.equals(" no")执行你的代码。然后在最后,检查宝宝是否是睡眠,如果他是,继续,如果没有,while循环将重新另外,代替.equals尝试.equalsIgnoreCase,这样用户就可以输入"是"或" yES"等。