为啥我的 ArrayList 没有打印出 Java 所需的输出?
Posted
技术标签:
【中文标题】为啥我的 ArrayList 没有打印出 Java 所需的输出?【英文标题】:Why doesn't my ArrayList print out the output desired in Java?为什么我的 ArrayList 没有打印出 Java 所需的输出? 【发布时间】:2021-12-24 23:42:09 【问题描述】:这里是新用户,我们正在学习 Java 中的方法并尝试使用 ArrayList 对其进行测试,但它没有提供所需的输出。
这是我创建的两种方法:
// initialize the ArrayList declared in the class block and add some test data to it
private static void addTestData()
listOfNumbers = new ArrayList<>();
listOfNumbers.add(23);
listOfNumbers.add(34);
listOfNumbers.add(45);
listOfNumbers.add(56);
// returns a true or a false value indicating if a number provided to it is present in an ArrayList
private static boolean listContains(int param1)
boolean found = false;
for (int x: listOfNumbers)
if (param1 == x)
found = true;
else
break;
return found;
我的目标是在 main 方法中测试“4”和“56”是否是 ArrayList 的一部分,所以这是我的代码:
boolean numberFound = false;
addTestData();
System.out.println("*** Testing ArrayList Search ***");
System.out.println("I am going to test if the number 4 is in the ArrayList.");
listContains(4);
numberFound = false;
if (numberFound = true)
System.out.println("The number 4 was found.");
else
System.out.println("The number 4 was not found.");
System.out.println("");
numberFound = false;
addTestData();
System.out.println("I am going to test if the number 56 is in the ArrayList");
listContains(56);
if (numberFound = true)
System.out.println("The number 56 was found.");
else
System.out.println("The number 56 was not found.");
我的输出告诉我 4 是 ArrayList 的一部分,而实际上它不是。知道该怎么做吗?
Directions for main method
Directions for my method
My output
【问题讨论】:
if (numberFound = true)
,是错字吗?你的意思是==
?
这是一个很好的使用HashSet
; ArrayList
将拥有O(n)
。 else break
打破你的循环,只需将其删除。
你写的代码毫无意义。如果您刚开始编程,(显然您是)按照教程进行。我还建议在开始使用 Java 之前先学习一门简单的语言,例如 Python。
您在if (numberFound = true)
中的分配绝对不正确。如上所述。其次,您没有在变量中捕获listContains(int)
的返回值,因此它根本不会影响numberFound
变量。第三,如果列表的第一个元素不等于提供的param1
,您的函数listContains(int)
将终止,因为如果条件不成立,您break
。你实际上想要else continue
或根本不想要else
-block。
请注意,出于这个原因,您不应将==
与布尔值一起使用。它已经是一个布尔值;就说if (numberFound)
。
【参考方案1】:
-
您正在分配而不是比较
if (numberFound = true)
。应该是if (numberFound == true)
,或者更确切地说是if (numberFound)
。
您的函数 listContains()
返回一个布尔值,您需要将其分配给 numberFound
。
numberFound = listContains(4);
或者您可以直接在if
条件下使用它,
if(listContains(4))
-
您的函数
listContains()
有问题。如果找到它应该返回true
,如果没有在遍历所有元素后返回false
,而你不是。就在第一次迭代中,如果比较是 false
,则您正在打破循环,返回 false
for (int x: listOfNumbers)
if (param1 == x)
return true;
return false;
如果按照你的课堂指导
boolean found = false;
for (int x: listOfNumbers)
if (param1 == x)
found = true;
break; // with this you can skip remaining unnecessary iteration
return found;
【讨论】:
这是short-circuiting的一个例子;如果值为true
,则不会评估不需要的术语。
相当不错,但比较通常不应该与布尔值一起使用。不是(numberFound == true)
,只是(numberFound)
。
谢谢!!在我的方法中,我仍然保持“boolean found = false;”根据我们的课堂说明,我最后返回了“找到”,但它仍然有效。我主要对“listContains”以及将其分配给什么感到困惑。
@ryanmonty42 也可以,您需要做的是,您需要在if (param1 == x) found = true; break;
中添加break
。以上是关于为啥我的 ArrayList 没有打印出 Java 所需的输出?的主要内容,如果未能解决你的问题,请参考以下文章
为啥下面的代码没有抛出IndexOutOfBoundsException,并打印出9 9 6?