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);
        }
            }

可以更好地设计为在drawHash循环之前和之后我不会有相同的drawStar循环,当我尝试在Eclipse中运行代码时,我没有得到任何输出。

如果您想知道它们是否有问题,这里是 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 回答