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

使用Java Eclipse使用for循环/无输出进行逐步细化,java,eclipse,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 =

我使用这段代码来显示下面注释的输出

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)
 }
但是,当我的驱动程序类如下所示时,预期的输出是正确的

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

请帮忙!!谢谢大家!

问题:

drawCore()
方法中,您说
for(int k=0;i
。注意中间的<代码> I <代码>。您根本看不到任何输出的原因是您的代码卡在无限循环中。将该语句更改为
for(int k=0;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();
}
公共字符串绘图空间(int num){
返回重复(“,num);
}
公共字符串drawHash(int num){
返回repeat(“#”,num);
}
公共字符串drawStar(int num){
返回重复(“*”,num);
}
公共字符串重复(字符串s,int num){
如果(s==null){
返回null;
}
最终StringBuilder sb=新StringBuilder();
for(int i=0;i
是不是
drawSpaces()
方法超出了你的发帖意图?@anthonyW不,我对此并不感到抱歉。drawStar的实际方法本质上是相同的,只是在drawStar的for循环中输出+=“*”而不是“为什么要将
drawStar()
drawHash()方法嵌套在其他for循环中?”?说
drawStar(star)
就足够了
drawshash(散列)
<代码>drawStar(星形)
;另外,请注意
drawSpaces()
方法。如果你给它一个1,它会给你一个空的
字符串,而不是一个空格。
public class AsciiArtDriver
{
    public static void main(String[] args)
    {
    AsciiArt ChryslerBuilding = new AsciiArt();
    System.out.print(ChryslerBuilding.drawCore(1,2));
    }
}
public String drawCore(int star, int hash) {
    String output = "";
    output += drawStar(star);
    output += drawHash(hash);
    output += drawStar(star);
    return output;
}
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();
}