2014-09-25 98 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); 
    }