2014-09-25 64 views
-3

有没有人知道只用一个循环而不是两个来重写这段代码?如何将两个for循环合并为一个(in java)

String message = "" ; 
for(int i=0; i<8; i++) { 
    for (int j = 0; j<i; j++) { 
     message = message + "*"; 
    } 
    message = message + "\n"; 
} 
JOptionPane.showMessageDialog(null, message); 
+9

你为什么写这一点,为什么它需要重写? – ControlAltDel 2014-09-25 18:05:44

+1

请注意,当在循环中创建一个'String'时,使用可变的'StringBuilder'类型(并且如果可能的话,为缓冲区设置一个合理的开始大小)会更有效。 – Bobulous 2014-09-25 18:15:07

+0

我不同意这个问题导致只提供个人意见的答案。该问题要求代码在功能上等同于嵌套for循环,并且可以测试给出的每个答案的正确性。意见不起作用。 – Bobulous 2014-09-27 16:48:30

回答

1

此代码满足要求:

String message = "" ; 
String m = ""; 
for(int i = 0; i < 8; i++) 
{ 
    message = message + m + "\n"; 
    m = m + "*"; 
} 
JOptionPane.showMessageDialog(null, message); 
+0

对不起,我是一个新手..我应该点击右边的复选标记吗?如果是这样,我只是......再次感谢 – 2014-09-26 02:34:49

2
for(int i = 0; i < 8; i++){ 
    message += "*******".substring(0, i) + "\n"; 
} 

也应使用StringBuilder

+0

@Durandal我也看到了,并纠正它:) – sleeplessnerd 2014-09-25 18:08:38

+0

为什么超过八个恒星的源字符串,当'我'永远不会超过'7'的值? – Bobulous 2014-09-25 18:19:23

+1

因为我不喜欢精确地计算它们。 – sleeplessnerd 2014-09-25 18:19:48

2

方式一:

String message = ""; 
String line = ""; 

for(int i=0; i<8; i++) { 
    message = message + line + "\n"; 
    line = line + "*"; 
} 
+0

所以形状应该是一个半金字塔,这就是为什么第二个循环在那里 – 2014-09-25 18:18:07

+0

我认为你需要改变这个'message = message + line +“\ n”;'否则你从两条换行开始,而且OP的嵌套循环不会。 – Bobulous 2014-09-25 18:18:21

+0

是的,你说得对,谢谢! – Thompson 2014-09-25 18:23:30

1

所以,这是有趣的解决方案,味道我的帖子:

 String message = ""; 
     for (int i = 0; i < 7; i++) { 
      message = "*\n" + message.replaceAll("\n", "*\n"); 
     } 
1

我我会把它留给读者来弄清楚这个工作是否,如何和为什么:)

String message = ""; 
    int n = 8; 
    int s = (int) Math.round((n + 1) * (n * 0.5)); 
    int j = 0, l = 1; 
    for (int i=0; i < s; ++i) { 
     int k = Integer.signum(j - i)^1; 
     message += "*\n".charAt(k); 
     l += k; 
     j += (l * k); 
    } 
+0

你疯了,我喜欢你! :) – Aivean 2014-09-25 19:34:03

0

这里是另外一个,短而有趣的:)

String message = "\n"; 
    for (int i = 0; i < 7; i++) { 
     message = message + "*" + message.substring(message.length() - i - 1); 
    }