2011-06-10 62 views
0

我是Java新手。剛纔我正在練習。如果我給輸入爲6,輸出應該是這樣的:Java中的金字塔序列

 
1 
2 3 
4 5 6 

這裏我張貼的代碼,我想:

import java.util.Scanner; 

public class Number { 
    public static void main(String args[]){ 

     int n; 
     Scanner in = new Scanner(System.in); 
     n = in.nextInt(); 
     in.close(); 
     int k = 1; 
     for (int i = 1; i <= n; i++) 
     { 
      // k=i; 
      for (int j = 1; j <= i; j++) 
      { 
       System.out.print(" " + k); 
       if (n==k) 
       { 
        break; 
       } 
       k++; 
      }  
      System.out.println("\n"); 
     } 
    } 
} 

如果我輸入N = 4,它顯示輸出爲:

 
1 

2 3 

4 

4 
+0

指示您的代碼可讀。在尋求幫助時,這是最低限度的做法(它最終會使問題的解決方案顯而易見)。 – deadalnix 2011-06-10 11:52:40

回答

2

break只會退出內部循環(即遍歷j的一個)。外部循環將繼續運行,導致打印出額外的數字。

您需要要麼return;System.exit(0)把你的外環(即遍歷i的)的正面的標籤替換它,並使用labeled break

+0

'return'可能是最好的選擇。 – 2011-06-10 11:55:10

+0

我同意。特別是當「打印一個數字金字塔爲'n'」代碼被提取到一個單獨的方法。 – 2011-06-10 11:55:55

1

正確縮進你的代碼。它有助於你的大腦理解。

也就是說,解決方案是兩個三個變量的循環。

您需要一個從1到n的循環。

從1到每行元素數的內循環。

而你需要每行元素的數量。每次執行內循環時該變量都會增加。

0

這是一個措辭嚴厲的問題,但我想猜你想知道爲什麼多餘的4?

原因是你有嵌套循環,所以break只打破了一個循環。這裏是你如何擺脫外環的:

outer: for (int i = 1; i <= n; i++) { 
... 
break outer; 

標籤outer是任意的 - 你可以把它叫做fred是你想要的。

-1
public static void main(String[] args) 
{ 
    int n = 10; 
    int k = 1; 
    boolean breakOuter = false; 
    for (int i = 1; i <= n; i++) 
    { 
    for (int j = 1; j <= i; j++) 
    { 
     System.out.print(" " + k); 
     if (n==k) 
     { 
     breakOuter = true; 
     break; 
     } 
     k++; 
    } 
    if(breakOuter) break; 
    System.out.println("\n"); 
    } 
} 
+0

謝謝u..nw im clear .. – user570786 2011-06-10 12:46:38

+0

這就是......優雅。我不是一個標籤休息的狂熱粉絲,但在這裏會更好。 – 2011-06-10 13:00:24

+0

有標籤的休息感覺有點基本,在所有的意義上這個詞:) – pap 2011-06-10 14:47:07

0
int n = 6; // target 

int i = 0; 
int nextRowAt = 2; 
int currentRow = 1; 
while (++i <= n) { 
    if (i == nextRowAt) { 
     System.out.println(); 
     nextRowAt = ++currentRow + i; 
    } 
    System.out.print("" + i + " "); 
} 

但是,除非你瞭解它,並能夠正確解釋的代碼,你可能會得到你分配的失敗。

我的建議是先在筆和紙上創建/理解。寫出序列並找出算法應該如何工作。那麼你開始編碼吧。

0
int sum =0; 
int n =10; 
//  n------> number till where you want to print 
boolean limtCrossed = false; 
for (int i = 0; i < n &&!limtCrossed; i++) { 
for(int j=0;j<=i;j++) { 
    sum++; 
    if (sum>n) { 
    limtCrossed = true; 
    break; 
    } 
    System.out.print(+ sum +" "); 
} 

System.out.println("\n"); 

} 
+1

請指出你的答案的主要方面以及它如何解決這個問題? – Christophe 2014-09-13 16:28:50