为什么我的ArrayList打印第一个对象3次?

时间:2019-03-16 16:14:21

标签: java arraylist bluej

我对Java比较陌生。我在练习中探索子类和超类实例的多态行为。本练习基于抽象类和接口的概念。 在本练习中介绍了ArrayList。 问题之一就是要求我们创建一个称为产品的WrittenWork对象的ArrayList,并将适当的对象添加到ArrayList中。

我的问题是ArrayList继续打印第一个项目3次,然后打印其余项目。

有人可以解释为什么这种情况持续发生吗?

编辑:我意识到我在感谢你们的错误! 我从

更改了for循环
[HttpGet("{id}")]
public ActionResult Get(Guid id)
{
    var files = Directory.GetFiles(@"Pictures\");
    foreach (var file in files)
    {
        if (file.Contains(id.ToString()))
        {
            return File(System.IO.File.ReadAllBytes(file), "image/jpeg");
        }
    }
    return null;
}

收件人

   for(WrittenWork w: products)
       System.out.println(w1.toString());
       System.out.println(w2.toString());
       System.out.println(w3.toString());

This Image shows how all the classes are connected

代码如下:

for(WrittenWork w: products)
    System.out.println(w.toString());

This is the output

6 个答案:

答案 0 :(得分:2)

除了没有使用方括号来正确识别for块外,您的一小段代码还存在逻辑缺陷。

您写了

  

ArrayList继续打印第一个项目3次,然后打印   其余的物品

这使我认为您的代码并不能真正代表您实际想要完成的工作。
在一开始,这是完全正常的,不用担心。 看来您想打印所有的WrittenWork

为此,您使用了(增强for循环

for (WrittenWork w : products)

但您从未考虑过w局部变量。

后台发生的事情是为您创建了一个Iterator<WrittenWork>JavaDoc),并且products列表中 next 元素的每次迭代都是通过w给您。

您只需要使用该w变量来打印products的所有元素。
Iterator将耗尽自身,循环将停止。


据您所知,这种for循环样式

for (WrittenWork w : products) { ... }

等同于

for (Iterator<WrittenWork> iterator = products.iterator(); iterator.hasNext(); ) {
    final WrittenWork w = iterator.next();
    ...
}

您可以看到检查的条件是iterator.hasNext();

答案 1 :(得分:1)

for(WrittenWork w: products)
       System.out.println(w1.toString());
       System.out.println(w2.toString());
       System.out.println(w3.toString());

   }

以程序执行的方式,它可能会让您感觉正确并可以运行,但是逻辑上的问题是,如果您选择使用隔离的System.out.println方法打印所有对象,那为什么要使用for(each)-loop

此外,如果将对象引用传递给toString()方法,则无需隐式且自动地调用System.out.println方法

答案 2 :(得分:0)

应该是:

  for(WrittenWork w: products)
       System.out.println(w.toString());

  }

您已经遍历了所有WrittenWork对象,使用w1,w2,w3首先使使用for循环无效。

答案 3 :(得分:0)

您正在遍历ArrayList,但是在每次迭代中都打印出w1w2w3。正如其他人指出的那样,每次迭代中都打印出w,它指向与迭代相对应的元素。

for (WrittenWork w: products){
   System.out.println(w.toString()); 
}

答案 4 :(得分:-1)

for (WrittenWork w: products){
   System.out.println(w.toString()); 
}

答案 5 :(得分:-1)

尝试一下:

for (WrittenWork w: products){
   System.out.println(w.toString()); 
}