【问题标题】:if statements acting differentlyif 语句的作用不同
【发布时间】:2013-05-30 07:46:16
【问题描述】:

使用以下代码做作业问题,当我在程序运行时输入 -1 时,控制器会插入字符串,即使输入 -1 时不应该这样做。 do while 循环对 while 语句使用相同的代码并且它正确退出,我不确定为什么其他代码不能按我认为的方式工作。我对 Java 和编程非常陌生,感谢任何帮助!

public static void main(String[] args) throws IOException
{
    Control controller;
    String userInput = "";
    //InputStream fs1;
    BufferedReader br1;
   // int count = 0;
    controller = new Control(userInput);
    do
    {
        System.out.println("Please input a String and press Enter.");
        System.out.println("Inputting -1 will terminate the building "
                + "and input process.");
        br1 = new BufferedReader(new InputStreamReader(System.in));
        if(!"-1".equals(userInput))
        {
            userInput = br1.readLine();
            controller.insert(userInput);
        }
    System.out.print("\n"+ "User input: "+ userInput + "\n\n");

    }// end do
    while (!"-1".equals(userInput));

    System.out.println("\nList initialized based on your inputs:\n");  
    controller.display();

}

这是我运行的: 跑步: 请输入一个字符串,然后按 Enter。 输入 -1 将终止构建和输入过程。 5

用户输入:5

请输入一个字符串,然后按 Enter。 输入 -1 将终止构建和输入过程。 4

用户输入:4

请输入一个字符串,然后按 Enter。 输入 -1 将终止构建和输入过程。 3

用户输入:3

请输入一个字符串,然后按 Enter。 输入 -1 将终止构建和输入过程。 -1

用户输入:-1

根据您的输入初始化列表:

列表(第一个-->最后一个):-1 3 4 5 构建成功(总时间:6 秒)

-1 不应在列表中。有什么建议吗?

【问题讨论】:

  • 不要在循环内不断创建新的 BufferedReader。 循环之前创建一次。
  • 另外,你的条件是不好的形式;我花了几毫秒的时间来解析它。使用while(!userInput.Equals("-1"))
  • @RobertHarvey:OP 的方式实际上是一个非常常见的习惯用法,它巧妙地处理了userInput 为空的情况。它确保不会发生 NPE;并且由于equals 的通用合同指定在使用 null 参数调用时应返回 false,因此它确保正确处理输入结束(当 readLine 返回 null 时)。
  • @Mac:Ic​​k。但是没问题。这在 C# 中要干净得多

标签: java list if-statement while-loop


【解决方案1】:

主要问题是您在插入后进行检查:

   if(!"-1".equals(userInput))
    {
        userInput = br1.readLine();
        controller.insert(userInput);
    }

这可能是一种解决方法:

   userInput = br1.readLine();
   if(!"-1".equals(userInput))
    {
        controller.insert(userInput);
    }

【讨论】:

    【解决方案2】:

    你的测试放错地方了。您正在读取数据并将其放入列表中而不对其进行测试。

        if(!"-1".equals(userInput))
        {
            userInput = br1.readLine();
            controller.insert(userInput);
        }
    

    应该是

        userInput = br1.readLine();
        if(!"-1".equals(userInput))
        {
            controller.insert(userInput);
        }
    

    【讨论】:

      猜你喜欢
      • 2012-02-15
      • 2012-07-16
      • 2021-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-17
      • 2023-03-13
      • 2017-10-22
      相关资源
      最近更新 更多