使用Java Eclipse逐步细化使用for循环/无输出

时间:2013-10-18 16:36:31

标签: java eclipse

我正在使用此代码显示下面评论的输出。

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的循环之前和之后使用相同的循环来绘制star,当我尝试在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));
    }
}

输出什么都没有。

请帮忙!!谢谢!

1 个答案:

答案 0 :(得分: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();
}