为啥我的 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?

在java里,为啥能用system.out.print(new Date( ));打印出时间来?原理是啥?

为啥 ArrayList 没有实现 Queue?

为啥此代码会根据缩进打印出不同的内容?

为啥 if 语句没有打印出字符串? cpp

为啥我的函数输出打印出“无”?