使用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();
}