【问题标题】:Do while loop error (switch statement)做while循环错误(switch语句)
【发布时间】:2023-04-10 08:23:01
【问题描述】:

我是 java 初学者,并尝试在 switch 语句中为许多情况实现 do while 循环。

    do {

        switch (UserInput){
        case "a2":
        case "a3":
        case "b1":
        case "b2":
        case "b3":
        case "c1":
        case "c2":
        case "c3":
        case "d1":
        case "d2":
        case "d3":
            TextIO.putln("This is a valid move!");
            break;
            default:
                TextIO.putln("Not a valid choice, please try again!");
        }
        } while (UserInput!="a2");

However when the choice is valid, it is constantly repeating 'This is a valid move' and vice versa for when it's invalid.有人能帮忙吗?

【问题讨论】:

  • 你到底想做什么?
  • 好吧,在循环结束时,您需要获得另一个输入。否则它将继续使用您在循环开始之前收到的输入。
  • 在程序执行时阻止有效移动或无效移动的消息在页面下方重复。
  • 获取另一个输入是什么意思?正如我在这里所说的完全初学者。
  • 我假设UserInput 是一个扫描仪,用于以某种形式收集用户的输入。因此,使用该变量在循环结束时获得第二个输入。您需要创建一个扫描仪:Scanner input = new Scanner(System.in);,然后您可以使用它来存储用户输入。

标签: java error-handling switch-statement do-while


【解决方案1】:

我以Scanner(System.in)为例:

Scanner s = new Scanner(System.in);
String input = "";

do {
    input = s.next();

    switch(input) {
    case "42":
        System.out.println("Success");
        break;
    default:
        System.out.println("Wrong answer!");
    }
} while(!input.equals("42"));

s.next() 是一个阻塞调用(在这种情况下),这意味着程序执行被暂停,而s.next() 等待新的用户输入。

如果没有该调用,while 循环只会一遍又一遍地评估 input 的相同值,向控制台发送垃圾邮件。

【讨论】:

    【解决方案2】:

    这是因为必须在循环中设置用户输入,因此用户可以输入其他内容。你只是设置用户输入一次,一次又一次地迭代它......

    【讨论】:

      【解决方案3】:

      在每次迭代评估循环条件之前,您不会得到另一个输入进行验证。您需要使用 Scanner 收集另一个输入,然后循环条件可以验证。

       Scanner scn= new Scanner(System.in);
       do {
      
          switch (UserInput){
          case "a2":
          case "a3":
          case "b1":
          case "b2":
          case "b3":
          case "c1":
          case "c2":
          case "c3":
          case "d1":
          case "d2":
          case "d3":
              TextIO.putln("This is a valid move!");
              break;
              default:
                  TextIO.putln("Not a valid choice, please try again!");
          }
      
          // We get the new input that we can check for validity
          UserInput = scn.nextLine();
          } while (!UserInput.equals("a2"));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-12-20
        • 1970-01-01
        • 2018-09-16
        • 2013-04-13
        • 2023-03-03
        • 2021-03-08
        • 2013-10-21
        • 2015-12-23
        相关资源
        最近更新 更多