2014-09-10 57 views
0
import java.util.Scanner; 

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

    int hoyde; 
    int linje = 0; 

    Scanner tast = new Scanner(System.in); 

    System.out.println("Hvor hoy skal din V bli?(mellom 2 og 10)"); 
    hoyde = tast.nextInt(); 
    tast.nextLine(); 

    //assert (hoyde <=2 && hoyde >=10) : "hoyde må være mellom 2 og 10"; 

    for(linje= 0; linje < hoyde;linje++) { 
     int start = linje; 
     int end = (hoyde-1)*2; 

     for(linje= 0;linje<=linje;linje++){ 
     if(linje == end){ 
      System.out.println("*"); 
      break; 
     } 
     else if(linje == start){ 
      System.out.print("*"); 
     } else{ 
      System.out.print(" "); 
     } 
     } 
    } 
    } 
} 

我想用*打印出V。不知何故,當我運行代碼時,它在同一行上打印出2顆單顆星。我被困在這一張,我似乎無法找到我應該如何傳播給定的信息。我使用Scanner輸入一個數字作爲V應具有的高度。Loop沒有給出想要的結果,卡住了

+0

不能使用相同的變量進行兩個循環。每次爲您的第二個循環創建一個新的。 – Keppil 2014-09-10 20:02:56

+0

'((...; linje <= linje; ...){'這會引起問題'linge'應該總是等於'linge'。 – Shaded 2014-09-10 20:04:26

回答

0

當(linje == start)和star 2(linje == end)時打印星號1。 內循環之後,linje> hoyde,因此退出外循環。

如上所述,您可能希望爲循環變量指定不同的名稱。

+0

因此,在能夠打印出結果之前,代碼跳出循環? – 2014-09-10 20:16:08

+0

是的,跳出第一個循環,所以它只打印1行,而不是很多。如你所願。 – 2014-09-10 20:19:53

1

即使它沒有解決任何Ja​​va相關的東西,但只有純粹的特設算法,它不應該被回答。但是由於您使用的是drjava,我認爲您只是在Java世界的第一條道路上,並且很高興能夠舉手。

由於@Keppil在他的評論中已經說過,從來沒有使用相同的迭代原始兩種贊同循環,除非有確實是一個特殊處理(從來沒有見過一個我自己),因爲你會失去時,第一循環索引ITS是由內部循環遞增(遞減)。

也有一些算法中的方法,並希望他們能在下面的代碼註釋清楚:

public class FancyVDrawer 
{ 
    public static void main(String[] args) 
    { 
    int hoyde; 
    int linje = 0; 
    Scanner tast = new Scanner(System.in); 
    System.out.println("Hvor hoy skal din V bli?(mellom 2 og 10)"); 
    hoyde = tast.nextInt(); 
    tast.nextLine(); 
    //assert (hoyde <=2 && hoyde >=10) : "hoyde må være mellom 2 og 10"; 
    ++hoyde; //We need hoyde line stars thus should be incremented by one since we cannot draw one star in last line 
    int end = (hoyde - 1) * 2; // The end should be calculated once, then decremented and not reassigned in each loop iteration 
    for (linje = 0; linje < hoyde; linje++) 
    { 
     int start = linje; 
     for (int i = 0; i < end; i++) 
     { 
     if ((i == start)) 
     { 
      System.out.print("*"); 
     } else if (i == (end-1)) 
     { 
      System.out.println("*"); 
      --end; // Decrement the end index once we are going to a new line 
     } 
     else 
     { 
      System.out.print(" "); 
     } 
     } 
     if(linje == (hoyde - 2)) // Should break to prevent writing the last lonely star 
     break; 
    } 
    } 
} 
相關問題