3

我正在参加一个在线 Java 入门课程。在关于ArrayLists 的课程中​​,有一个练习给我们一个对象,并要求调用第一个是纵向ArrayList的对象。我们得到了一些代码开始:Picturedraw()Picture

// BlueJ project: lesson7/gallery8
// Find and draw the first portrait in the gallery.
// Notice the pseudocode from the instructions has been started for you; your task is to complete it. 

import java.util.ArrayList;

public class ListOfPictures
{
    public static void main(String[] args)
    {
        ArrayList<Picture> gallery = new ArrayList<Picture>();
        gallery.add(new Picture("degas1.jpg"));
        gallery.add(new Picture("gaugin1.jpg"));
        gallery.add(new Picture("monet1.jpg"));
        gallery.add(new Picture("monet2.jpg"));
        gallery.add(new Picture("renoir1.jpg"));

        int i = 0;
        boolean found = false;
        while ()
        {
        }

        if (found)
        {
            ....draw();
        }
    }
}

对我来说,他们希望我们做什么似乎很清楚。不过,我认为最好return从 for-each 循环中创建一个函数,而不是使用一个found和一个计数器变量。这就是我想出的:

    public static void main(String[] args)
    {
        // declare/initialize/populate gallery
        Picture firstPortrait = findFirstPortrait(gallery);
        if (firstPortrait != null)
            firstPortrait.draw();
    }

    private Picture findFirstPortrait(ArrayList<Picture> gallery)
    {
        for (Picture pic : gallery)
            if (pic.getHeight() > pic.getWidth())  // pic is in portrait
                return pic;
        return null;  // there aren't any images in portrait
    }

不过,他们似乎真的不喜欢它。当我提交我的代码时,我得到了这个:

ListOfPictures.java: Keep looking for matches while found is false

Score
0

哪种方法更好?一般来说,我应该避免使用这样的“标志”变量吗?

编辑:是的,它是自动分级的。实际上,我在其他练习中遇到了一个错误,说评分者不知道如何处理我的代码,我应该将其发布在论坛上(看起来有点像 Stack Overflow,只是似乎没有人知道如何处理使用它)。

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

4

5 回答 5

1

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

也就是说,你的方式是:

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

对您的问题进行评分的人要么不太了解 Java,要么过于迂腐或苛刻。

于 2013-10-25T00:45:48.357 回答
1

老师希望学生知道何时使用for循环和何时使用while循环之间的区别的经典示例。while当您不知道需要多少次迭代才能找到您要查找的内容时,请使用循环。当您知道确切的迭代次数时使用“for”循环

于 2013-10-25T00:51:35.707 回答
0

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

你的方法更好,如果那是你的要求。

于 2013-10-25T00:45:14.493 回答
0

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

在我看来,这是个人的决定。这两种选择都有充分的理由。

于 2013-10-25T00:49:21.353 回答
0

For each 通常适用于对 arraylist 中的每个项目进行操作。使用 found 标志,您基本上会在找到它的第一个实例处停止。

于 2013-10-25T00:49:35.430 回答