2014-10-28 89 views
0

我对编程颇为陌生,因为这是我在大学的第一个学期,没有任何先验知识。现在在Python工作后,我们正在开发一个算命程序。我遇到的主要问题是试图返回交换机,询问用户是否想再次玩游戏,或者如果他们输入了8个案例之外的无效回复。还必须有一个嵌套在另一个while循环中的while循环。在循环切换case和嵌套while循环时遇到问题

Scanner user = new Scanner(System.in); 
    System.out.println("Welcome to the Fortune Telling program.\n"); //Welcome message 

    System.out.print("Would you like me to tell your fortune? Type 1 for yes and any other number for no: "); //ask for yes or no to run 
    int Var0 = user.nextInt(); 
    if (Var0 == 1) 
    { 
     System.out.print("Enter a number 1-8 and I will tell your fortune: "); //ask for number between 1-8 to find fortune or invalid 
     int Var1 = user.nextInt();            
      switch (Var1) 
      { 
      case 1:                    //case 1-8 fortunes 
       System.out.println("\nYou will become great if you believe in yourself."); 
       break; 
      case 2: 
       System.out.println("\nSerious trouble with bypass you."); 
       break; 
      case 3: 
       System.out.println("\nYou will travel to many exotic places in your lifetime."); 
       break; 
      case 4: 
       System.out.println("\nYour ability for accomplishment will follow with success."); 
       break; 
      case 5: 
       System.out.println("\nWhen fear hurts you, conquer it and defeat it!"); 
       break; 
      case 6: 
       System.out.println("\nYou will be called in to fulfill a position of higher honor and responsibility."); 
       break; 
      case 7: 
       System.out.println("\nYour golden opportunity is coming shortly."); 
       break; 
      case 8: 
       System.out.println("\nIntegrity is doing the right thing, even when nobody is watching."); 
       break; 
      default: 
       System.out.print("That's not a valid number. Try again.\n");       //invalid number try to rerun for correct response 
      } 
     }                       //display next print only on case not default 
    System.out.print("Would you like another fortune? Type 1 for yes and any other number for no: "); //loop this back into 'switch' 
    int Var2= user.nextInt(); 

    System.out.print("Thank you for trying the fortune telling program.");       //Thank you message 
    user.close(); 
    } 
} 
+0

为什么你需要一个嵌套的while循环? – Chiseled 2014-10-28 21:58:51

+0

它是作业的一部分。但我不明白应该放在哪里,以便用户可以根据需要再次运行交换机。 @ Moh123 – 2014-10-28 22:03:20

+0

你的任务可能是由不擅长编程的人设定的。恕我直言,你应该使用for循环,而不是while循环,因为你有一个迭代的方面(重新询问用户是否输入了无效的响应)。另外,这个任务不应该指定一个实现 - 选择一个是学习的一部分。 – Bohemian 2014-10-28 22:22:46

回答

0

您不需要嵌套循环。虽然循环做得很好。您也只需要一个Var0,这也是保持/停止循环的条件。整个代码位于try-catch块内部,用于在用户输入非int的内容时解决问题。最后在最后关闭扫描仪 - 不管有没有。

 Scanner user = new Scanner(System.in); 
     try { 

      System.out.println("Welcome to the Fortune Telling program.\n"); 
      System.out 
        .print("Would you like me to tell your fortune? Type 1 for yes and any other number for no: "); 
      int Var0 = user.nextInt(); 
      while (Var0 == 1) { 
       System.out 
         .print("Enter a number 1-8 and I will tell your fortune: "); 
       int Var1 = user.nextInt(); 
       switch (Var1) { 
       case 1: // case 1-8 fortunes 
        System.out 
          .println("\nYou will become great if you believe in yourself."); 
        break; 
       case 2: 
        System.out.println("\nSerious trouble with bypass you."); 
        break; 
       case 3: 
        System.out 
          .println("\nYou will travel to many exotic places in your lifetime."); 
        break; 
       case 4: 
        System.out 
          .println("\nYour ability for accomplishment will follow with success."); 
        break; 
       case 5: 
        System.out 
          .println("\nWhen fear hurts you, conquer it and defeat it!"); 
        break; 
       case 6: 
        System.out 
          .println("\nYou will be called in to fulfill a position of higher honor and responsibility."); 
        break; 
       case 7: 
        System.out 
          .println("\nYour golden opportunity is coming shortly."); 
        break; 
       case 8: 
        System.out 
          .println("\nIntegrity is doing the right thing, even when nobody is watching."); 
        break; 
       default: 
        System.out.print("That's not a valid number. Try again.\n"); 
       } 
       System.out 
         .print("Would you like another fortune? Type 1 for yes and any other number for no: "); 
       Var0 = user.nextInt(); 
      } 

      System.out 
        .print("Thank you for trying the fortune telling program."); 
     } catch (Exception e) { 
System.out.println("This is what you tell if user types something which is not a digit"); 
     } finally { 
      user.close(); 
     } 
0

的概念有点帮助:

当你说“我需要返回到交换机......”,这意味着你需要一个循环。

什么是需要重复的部分?你(或者说,你的老师)可能期望的行为是在告诉财富后,“你愿意我告诉你的财富”这个问题会再次出现。这意味着你必须把它和它所带来的一切(财富告诉自己)放在一个循环中。

在这种情况下,通常的结构是

  • 显示问题
  • 获取用户输入
  • 环,但条件是用户没有进入“完成”输入
    • 什么就做什么用户输入需要的任务。
    • 再次显示问题
    • 再次获取用户输入,以便下一次循环检查条件时,它将具有计算的新值。

你能想到你的程序是适合这种模式的零件?

现在接下来的事情是你需要一段时间。这是一个提示:程序希望用户输入值1-8。如果他进入'9'或'0'或其他什么的话,那么程序是否应该忽略这一点,并再次问他是否想要这笔财富告诉他,还是应该坚持?

+0

这实际上帮了我很多!我会尽量玩弄这个并找出答案。我真的不想直接回答,所以我可以自己弄清楚。下次我希望回复它会被纠正。再次感谢你! – 2014-10-28 22:18:00

0

请尝试以下操作。您不需要var1

public static void main(String[] args) 
{ 
    // TODO Auto-generated method stub 
    Scanner user = new Scanner(System.in); 
    System.out.println("Welcome to the Fortune Telling program.\n"); //Welcome message 

    System.out.print("Would you like me to tell your fortune? Type 1 for yes and any other number for no: "); 

    int Var0 = 0; 

    while(Var0 != -1) 
    { 
     System.out.print("Enter a number 1-8 and I will tell your fortune or -1 to quit "); //ask for number between 1-8 to find fortune or invalid 

     Var0 = user.nextInt(); 

     switch (Var0) 
     { 
     case 1:                    //case 1-8 fortunes 
      System.out.println("\nYou will become great if you believe in yourself."); 
      break; 
     case 2: 
      System.out.println("\nSerious trouble with bypass you."); 
      break; 
     case 3: 
      System.out.println("\nYou will travel to many exotic places in your lifetime."); 
      break; 
     case 4: 
      System.out.println("\nYour ability for accomplishment will follow with success."); 
      break; 
     case 5: 
      System.out.println("\nWhen fear hurts you, conquer it and defeat it!"); 
      break; 
     case 6: 
      System.out.println("\nYou will be called in to fulfill a position of higher honor and responsibility."); 
      break; 
     case 7: 
      System.out.println("\nYour golden opportunity is coming shortly."); 
      break; 
     case 8: 
      System.out.println("\nIntegrity is doing the right thing, even when nobody is watching."); 
      break; 
     default: 
      System.out.print("That's not a valid number. Try again.\n"); //invalid number try to rerun for correct response 
     } 

    } 
    System.out.print("Thank you for trying the fortune telling program.");//Thank you message 
    user.close(); 
} 

将代码放在try catch块中,只要确保您将捕获使用扫描仪时可能发生的任何异常。在finally块中关闭扫描器,或者如果您使用java 1.7或更高版本,则使用try-with-resources更好。