我对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());
答案 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,但是在每次迭代中都打印出w1
,w2
和w3
。正如其他人指出的那样,每次迭代中都打印出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());
}