0

このコードを使用して、以下にコメントされている出力を表示しています。

public String drawCore(int star, int hash)
{
String output = "";
for(int i=0; i<star; i++)
{
    output += this.drawStar(star);
    for(int j = 0; j<hash; j++)
    {
        output += this.drawHash(hash);
    }
    for(int k = 0; i < star; k++)
    {
        output += this.drawStar(star);
    }
}
return output;
 //intended output (assuming parameters entered are 1 for star and 2 for hash:
 // *##*
 //actual output
 // (nothing)
 }

私の最初の質問は、コードが

for(int i=0; i<star; i++)
    {
        output += this.drawStar(star);
        for(int j = 0; j<hash; j++)
        {
            output += this.drawHash(hash);
        }
        for(int k = 0; i < star; k++)
        {
            output += this.drawStar(star);
        }
            }

Eclipseでコードを実行しようとすると、drawHashのループの前後にdrawStarへの同じループがない場所に設計する方が良いかもしれませんが、出力が得られません。

それらに問題があるかどうか疑問に思っている場合は、 drawStar および drawHash メソッドを次に示します。

public String drawSpaces(int num)
{
    String output = "";
    for(int i=1; i<num; i++)
    {
        output+= " ";
    }
    return output;
}

public String drawHash(int num)
{
    String output = "";
    for(int i=0; i<num; i++)
    {
        output += "#";
    }
    return output;
}

また、コードだけを含む Driver クラスを実行しようとすると、コンソールの問題ではないと思います

 public class AsciiArtDriver
 {
     public static void main(String[] args)
     {
     AsciiArt ChryslerBuilding = new AsciiArt();
     System.out.print(ChryslerBuilding.draw());
     }
 }

意図した出力は正しいですが、Driver クラスが次のようになっている場合

public class AsciiArtDriver
{
    public static void main(String[] args)
    {
    AsciiArt ChryslerBuilding = new AsciiArt();
    System.out.print(ChryslerBuilding.drawCore(1,2));
    }
}

出力は何もありません。

助けてください!!ありがとう!

4

1 に答える 1

1

問題:

あなたのdrawCore()方法では、あなたは言いfor(int k = 0; i < star; k++)ます。i真ん中に注目。出力がまったく表示されないのは、コードが無限ループに陥っているためです。そのステートメントを に変更するとfor(int k = 0; k < star; k++)、 の出力が得られます*####*。目的の出力を得るには、以下を参照してください。


解決策: 余分なループを取り除きます。

public String drawCore(int star, int hash) {
    String output = "";
    output += drawStar(star);
    output += drawHash(hash);
    output += drawStar(star);
    return output;
}

余分なループを取り除くという基本的な解決策を超えて、そのコードをリファクタリングして (パフォーマンスのために) StringBuilder を使用し、さらに共通のrepeat()メソッドを使用してループを処理します。

public String drawSpaces(int num) {
    return repeat(" ", num);
}

public String drawHash(int num) {
    return repeat("#", num);
}

public String drawStar(int num) {
    return repeat("*", num);
}

public String repeat(String s, int num) {
    if(s == null) {
        return null;
    }
    final StringBuilder sb = new StringBuilder();
    for(int i = 0; i < num; i++) {
        sb.append(s);
    }
    return sb.toString();
}
于 2013-10-18T17:30:48.933 に答える