Java 在函数中使用for each循环更好,还是使用while循环和“;发现” ;变量

Java 在函数中使用for each循环更好,还是使用while循环和“;发现” ;变量,java,coding-style,Java,Coding Style,我正在参加一个关于Java的在线介绍课程。在关于ArrayLists的课程中,有一个练习,我们得到了Picture对象的ArrayList,并要求调用第一张Picture的draw()。我们从以下代码开始: //BlueJ项目:第7课/gallery8 //找到并绘制画廊中的第一幅肖像。 //请注意,说明中的伪代码已经为您启动;你的任务就是完成它。 导入java.util.ArrayList; 公共类图片列表 { 公共静态void main(字符串[]args) { ArrayList gall

我正在参加一个关于Java的在线介绍课程。在关于
ArrayList
s的课程中,有一个练习,我们得到了
Picture
对象的
ArrayList
,并要求调用第一张
Picture
draw()。我们从以下代码开始:

//BlueJ项目:第7课/gallery8
//找到并绘制画廊中的第一幅肖像。
//请注意,说明中的伪代码已经为您启动;你的任务就是完成它。
导入java.util.ArrayList;
公共类图片列表
{
公共静态void main(字符串[]args)
{
ArrayList gallery=新建ArrayList();
添加(新图片(“degas1.jpg”);
添加(新图片(“gaugin1.jpg”);
添加(新图片(“monet1.jpg”);
添加(新图片(“monet2.jpg”);
添加(新图片(“renoir1.jpg”);
int i=0;
布尔值=false;
而()
{
}
如果(找到)
{
……画();
}
}
}
我似乎很清楚他们希望我们做什么。尽管如此,我还是认为最好创建一个函数并从for each循环返回
,而不是使用
found
和一个计数器变量。这就是我想到的:

publicstaticvoidmain(字符串[]args)
{
//声明/初始化/填充库
Picture FirstPicture=findFirstPortrait(画廊);
如果(第一个肖像!=null)
firstgrait.draw();
}
私人图片查找FirstPortrait(ArrayList图库)
{
(图片来源:画廊)
如果(pic.getHeight()>pic.getWidth())//pic是纵向的
返回pic;
返回null;//纵向中没有任何图像
}
不过,他们似乎真的不喜欢它。当我提交代码时,我得到了以下信息:

ListOfPictures.java:在“找到”为false时继续查找匹配项
分数
0
哪种方法更好?一般来说,我应该避免使用这样的“标志”变量吗

编辑:是,自动评分。实际上,我在其他练习中遇到了一个错误,说评分员不知道如何处理我的代码,我应该把它发布在论坛上(这看起来像是堆栈溢出,只是没有人知道)


我将在论坛上链接到这个问题。:)

对每个返回模式使用。在这种情况下,标志是一个不必要的状态变量,在更复杂的程序中很容易导致代码腐烂


如果你是这样问的话,你的方式会更好。

当然,你是在征求意见。如果正确实现,这两种方法将产生相同的输出

也就是说,你的方式是:

  • 清洁剂
  • 清晰的
  • 更可重复使用
  • 并避免不必要的变量使用

给你的问题打分的人要么不太懂Java,要么是不必要的迂腐或苛刻。

我的编程教授更喜欢
ẁhile
解决方案。他说,方法或循环的每次退出(循环条件、中断、返回、继续)都使跟踪错误或证明方法属性变得更加困难


在我看来,这是个人的决定。这两个选项都有很好的理由。

对于每个选项,通常都是针对arraylist中的每个项目进行操作。有了found标志,基本上就是在找到它的第一个实例时停止

一个教师希望学生知道何时使用
进行循环和何时使用
进行循环的基本示例。当你不知道需要多少次迭代才能找到你要找的东西时,使用
while
循环。当你知道准确的迭代次数时,使用“for”循环

你的评分员被误导了。看起来你的解决方案是有效的,我会回去看看导师是否有充分的理由给你评分,或者只是愚蠢;-)该退课了。你应该向教授报告。如果它是自动评分的,那么评分系统中就有一个缺陷。如果它是由一个人评分的,他们应该解雇评分员,因为他给了你0分,而事实上你应该得到a+。在线课程有论坛,你可以在那里提供反馈。你可以添加你在stackoverflow上得到的评论,作为评分确实存在问题的参考。继续努力<代码>你的任务就是完成它。
也许这就是为什么你得零分,没有填写任何必需的代码。你不应该这样做,而应该尝试一些不完全符合说明的东西吗
?您的意思是for each不会在找到的第一个实例处停止吗?
返回
会在找到匹配对象后停止循环,并且不使用额外变量。是的,我错过了返回!Nevermind:PSo,我应该在函数中使用
while
,当我找到一个肖像图像时,我应该使用
返回一个肖像图像,而不是我发布的任何一种方式?你的教授完全正确,希望只返回一个。基本上是的。但实际上,在某些情况下,更好地理解使用
for
循环(特别是在非常小的方法中)。它使用一个不需要的附加方法,其中包含两个返回语句,这会引发checkstyle警告。@AlexWien PSSH,a)默认情况下,checkstyle只对>2个返回语句发出警告,b)如果查看,理由是:“太多的返回点可能表示代码试图做得太多或可能难以理解”,这里的情况肯定不是这样。至于额外的方法:就像我说的,这是一个意见问题。@AlexWien你可以