2015-04-23 37 views
0

嗨,我是編程新手,今天我正在編寫一個Java數組任務的代碼,並且在開始時我試圖測試我已經完成了什麼,並且在第一個for循環(數組讀取)程序不停止讀一個數字,即使我已經輸入一個數字(n)的長度。請幫忙 ?因爲一旦執行for循環if條件裏面,然後changed設置爲true和它的價值從未改變爲假導致無限循環由while循環做Java數組讀取循環永不結束?

import java.util.Scanner; 


public class ReadTwoElementsForArrayAndSum { 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 

     Scanner in = new Scanner(System.in); 

     System.out.println("Please enter N element:"); 
     int n = in.nextInt(); 

     System.out.print("Please enter K element, for k < N: "); 
     int k = in.nextInt(); 

     int[] arrayN = new int[n]; 
     System.out.print("Please enter N numbers for the array: "); 

     for(int i = 0; i < arrayN.length; i++) { 
      arrayN[i] = in.nextInt(); 
     } 
     boolean changed = false; 
     do { 
      int temp = 0;   
      for(int i = 0; i < (arrayN.length-1); i++) { 
       if(arrayN[i] > arrayN[i+1]){ 
        temp = arrayN[i]; 
        arrayN[i] = arrayN[i+1]; 
        arrayN[i+1] = temp; 
        changed = true; 

       } 
      } 
     } while (changed); 
     for(int i = 0; i < arrayN.length; i ++) { 
      System.out.printf("%d", arrayN[i]); 
      System.out.print(k); 
     } 


     in.close(); 


    } 

} 
+0

是的的確控制不斷進入這一行正確執行'改變=真;'如果它真的會導致do-while永遠運行 – Vihar

+0

如果你想對數組進行排序,你可以使用Arrays.sort(arrayN);' – kaykay

回答

0

循環是無限的。

相反,你可以使用Arrays.sort(arrayN)或者,如果你想使用僅環再試試下面的代碼

int count = 0; 
do { 
    int temp = 0; 
    count++; 
    for (int i = 0; i < (arrayN.length - 1); i++) { 
     if (arrayN[i] > arrayN[i + 1]) { 
      temp = arrayN[i]; 
      arrayN[i] = arrayN[i + 1]; 
      arrayN[i + 1] = temp; 


     } 
    } 
} while (count < (arrayN.length)); 

Demo

+0

謝謝,但我沒有明白爲什麼我以前的循環是因爲這樣做而粉碎:( – Yordan

+0

@Yordan,因爲你只是將'changed'的值更改爲'true'而不是任何地方爲false,做的時候執行無限次,因爲它的條件是真的不是假的 – silentprogrammer

+0

謝謝,將知道它爲下一個任務:) – Yordan

0

在這個循環:

do { 
     int temp = 0;   
     for(int i = 0; i < (arrayN.length-1); i++) { 
      if(arrayN[i] > arrayN[i+1]){ 
       temp = arrayN[i]; 
       arrayN[i] = arrayN[i+1]; 
       arrayN[i+1] = temp; 
       changed = true; 

      } 
     } 
    } while (changed); 

你一次改變changedtrue,永遠不會讓它false。如果你想結束你的循環,你必須做些什麼(這取決於你的方法)使得changed錯誤,因此它可以結束循環。

0

你應該在一個do-while循環做什麼

boolean flag=true; 
do{ 
    (some condition){ 
     flag=false; 
    } 

}while(flag) 

這將導致do-while循環