Java 如果语句的行为不同
用下面的代码做一个家庭作业问题,当我在程序运行时输入-1时,控制器插入字符串,即使输入-1时不应该插入字符串。do while循环对while语句使用相同的代码,并且它正确地退出,我不确定为什么其他代码不能按我认为应该的方式工作。我对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 = "";
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语言中要干净得多#