3

オンラインの Java 入門コースを受講しています。のレッスンでは、オブジェクトの が与えられ、縦向きの最初のものを呼び出すように求めArrayListられる演習があります。最初にいくつかのコードが与えられます。ArrayListPicturedraw()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

これを行うより良い方法はどれですか?一般に、そのような「フラグ」変数の使用は避けるべきですか?

編集:はい、自動的に採点されます。私は実際に、採点者が私のコードを処理する方法を知らなかったので、フォーラムに投稿する必要があるというエラーを他の演習で受け取りました (これは疑わしいことにスタック オーバーフローのように見えますが、誰もその方法を知らないようです)。それを使用してください)。

フォーラムでこの質問にリンクします:)

4

5 に答える 5

1

もちろん、あなたは意見を求めています。どちらの方法も、正しく実装されていれば、同じ出力が生成されます。

つまり、あなたの方法は次のとおりです。

  • クリーナー
  • より明確に
  • より再利用可能
  • 不必要な変数の使用を回避します。

あなたの質問を採点した人は誰でも、Java についてあまり知らないか、不必要に衒学的で厳しいかのどちらかです。

于 2013-10-25T00:45:48.357 に答える
1

forいつループを使用するか、いつループを使用するかの違いを生徒に知ってもらいたい教師の古典的な例whilewhile探しているものを見つけるのに何回の反復が必要かわからない場合は、ループを使用します。正確な反復回数がわかっている場合は、「for」ループを使用します

于 2013-10-25T00:51:35.707 に答える
0

for-each-return パターンを使用します。この場合、フラグは不要な状態変数であり、より複雑なプログラムではコードの腐敗を容易に引き起こします。

それがあなたが求めているものなら、あなたのやり方はより良いです。

于 2013-10-25T00:45:14.493 に答える