我正在使用此代码显示下面评论的输出。
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));
}
}
输出什么都没有。
请帮忙!!谢谢!
答案 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();
}