2013-08-26 59 views
2

//問題本身(我的代碼之後)我的打印循環的邏輯不正確。不能讓我的頭這

變量n是隨機生成的整數。輸出字符'*'和'#',以便第一行只包含星號,最後一行只包含星號。星星的數量在連續的行中減少。一行中的字符總數爲n,並且有n + 1行。

例如,如果n的值爲5,程序將輸出:

***** 
****#  
***##  
**###  
*####  
#####  

//我下面的代碼!

Random r = new Random();  
int n = r.nextInt(5) + 10;  
System.out.println("n: "+n); 

while(n>0){ 

for(int star = n; star>0; star--){ 
    System.out.print("*"); 
} 

for(int hash = 0; hash<n; hash++){ 
    System.out.print("#"); 

    } 

    System.out.println(""); //new line 
n--; 


} 

//我的代碼輸出 - 問題:#的需要從0尺寸增加而不是減少,如*的

**********########## 
*********######### 
********######## 
*******####### 
******###### 
*****##### 
****#### 
***### 
**## 
*# 
+1

看起來像家庭作業,但他做了一個體面的嘗試。我願意提供提示(儘管不是所有的代碼!)。 – chrylis

+0

@JanesAbouChleih謝謝 – Will

+0

@不客氣.- – jAC

回答

0

您目前正在打印的正確數量*每次迭代。您應該打印的#的數量總是等於您正在進行的迭代(從0開始)。所以,你可以保持這個計數器(比如,i)將被初始化爲0,並在每個while -loop迭代結束時遞增一次,然後就可以通過循環來i打印# S:

for (int hash = 0; hash < i; hash++) { 
    System.out.print("#"); 
} 

一個更好的辦法,但是,這是隻使用一個for -loop到位while -loop,避免改變n,牢記在ith迭代應打印n - i* S和i# S:

for (int i = 0; i < n; i++) { 

    for (int star = 0; star < n - i; star++) { // n-i stars 
     System.out.print("*"); 
    } 

    for (int hash = 0; hash < i; hash++) { // i hashes 
     System.out.print("#"); 
    } 

    System.out.println(); // don't need an empty string here 
} 
0

您的star循環開始正常,但是在hash循環中,您告訴程序只計數到n並打印出許多散列標記。

相反,您需要另一個數字來表示星號或散列數;從n中減去以獲得另一個數字。使用嵌套for循環;外部打印每行數爲n,內部打印數從0打印到lineNumber,然後打印到n打印散列。

1

只記得你所在的路線。不需要算法演講。

final int n = 4; 

int lineNr = 0; 

while (n >= lineNr) 
{ 
    for (int i = 1; i <= n - lineNr; i++) 
     System.out.print("*"); 

    for (int j = 1; j <= lineNr; j++) 
     System.out.print("#"); 

    System.out.println(); 
    lineNr++; 
} 
0

不要修改循環中的n,因爲n給出了每行的符號總數。在這裏我保留了你的程序,並且引入了變量i來在while循環中使用。

Random r = new Random();  
int n = r.nextInt(5) + 10;  
System.out.println("n: "+n); 
int i=n; 

while(i>=0){ 

    for(int star = i; star>0; star--){ 
    System.out.print("*"); 
    } 

    for(int hash = i; hash<n; hash++){ 
    System.out.print("#"); 
    } 

    System.out.println(""); //new line 
    i--; 
} 
+0

你的'while'條件有缺陷。首先,它是'while(i> 0)',沒有'int'。其次,它實際上是'while(i> = 0)',打印最後一行。除此之外,它的作品。 – GGrec

+0

謝謝:),編輯 – azzurroverde

0

我的代碼:

Random r = new Random();  
int lines = r.nextInt(5) + 10; 
System.out.println("n: "+lines); 

for (int n=lines; n>=0; n--) { 
    String toPrint = "*"; 
    for(int i=0; i<lines; i++){ 
    if (i==n) { 
     toPrint = "#"; 
    } 
    System.out.print(toPrint); 
    } 
    System.out.println(); 
} 

我不喜歡你的命名約定。單個字母字符最好僅用於循環。主循環(在你的案例while)看起來更簡單for

檢查每次完成,這可能比這裏似乎使用的兩個循環效率低(就像你一樣)。但IMO的代碼使用起來更加清晰。請注意,字符串開關每行只能製作一次。