Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果语句的行为不同_Java_List_If Statement_While Loop - Fatal编程技术网

Java 如果语句的行为不同

Java 如果语句的行为不同,java,list,if-statement,while-loop,Java,List,If Statement,While Loop,用下面的代码做一个家庭作业问题,当我在程序运行时输入-1时,控制器插入字符串,即使输入-1时不应该插入字符串。do while循环对while语句使用相同的代码,并且它正确地退出,我不确定为什么其他代码不能按我认为应该的方式工作。我对Java和编程非常陌生,非常感谢您的帮助 public static void main(String[] args) throws IOException { Control controller; String userInput = "";

用下面的代码做一个家庭作业问题,当我在程序运行时输入-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

请输入字符串并按Enter键。 输入-1将终止构建和输入过程。 四,

用户输入:4

请输入字符串并按Enter键。 输入-1将终止构建和输入过程。 三,

用户输入:3

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

用户输入:-1

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

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


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

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

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

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

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

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

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

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

   if(!"-1".equals(userInput))
    {
        userInput = br1.readLine();
        controller.insert(userInput);
    }
这可能是一个解决方案:

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

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

   if(!"-1".equals(userInput))
    {
        userInput = br1.readLine();
        controller.insert(userInput);
    }
这可能是一个解决方案:

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

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