2016-03-07 188 views
5

我正在打印2行到控制檯。它們都可以打印,但是當第二個打印時,第一個打印到第二個,所以這兩行是相同的。我從來沒有遇到過這個。爲什麼第二次打印覆蓋第一張,我該如何解決?系統輸出println

public static void main(String args[]){ 
    new MergeSort(90000); 

    System.out.println("Array to be mergesorted: " +Arrays.toString(array)); 

    long start = System.currentTimeMillis(); 

    mergeSort(array, 1, array.length); 

    long end = System.currentTimeMillis(); 

    System.out.println("Result: " + Arrays.toString(array)); 
} 

構造:

public MergeSort(int n){ 
    Random rand = new Random(); 
    array = new int[n]; 
    for(int i = 0; i <array.length; i++){ 
     array[i] = rand.nextInt(101); 
    } 
} 

休息的代碼:

public static void merge(int[] A, int p, int q, int r){ 
    // 
    //length of subarray 1 
    int n1 = q-p+1; 

    //length of subarray 2 
    int n2 = r-q; 

    int[] L = new int[n1+1]; 
    int[] R = new int[n2+1]; 

    for(int i = 0; i < n1; i++){ 
     L[i] = A[p+i-1]; 
    } 

    for(int j=0; j< n2; j++){ 
     R[j] = A[q+j]; 
    } 

    L[n1] = Integer.MAX_VALUE; 
    R[n2] = Integer.MAX_VALUE; 

    int i = 0; 
    int j = 0; 

    for(int k = p-1; k < r; k++){ 
     if(L[i] <= R[j]){ 
      A[k] = L[i]; 
      i++; 
     } 
     else{ 
       A[k] = R[j]; 
       j++; 
      } 
    } 

} 

public static void mergeSort(int[] A, int p, int r){ 
    if (p<r){ 
     int q = (int) Math.floor((r+p)/2); 
     mergeSort(A, p, q); 
     mergeSort(A, q+1, r); 
     merge(A, p, q, r); 
    } 
} 
+0

你的'MergeSort'構造函數用'new MergeSort(90000)'做了什麼?而且,你的'mergeSort(array,1,array.length)'指令是做什麼的? –

+0

@ElliottFrisch您請求的代碼現在已添加。 – Jesper

+0

我*建議*你嘗試一個調試器。 –

回答

5

這是由於在IDE控制檯的緩衝區限制。我無法解釋爲什麼你會看到某些字符串的重複輸出,而不是說它看起來像是一個當它達到極限時如何清除緩衝區中的舊字符的錯誤。

我認爲Eclipse的控制檯輸出中默認有80,000個字符限制。由於您在1-100次之間打印90,000個數字兩次,這意味着您會過度拍攝此緩衝區,然後是一些。

要提高緩衝限制在控制檯上:

  • 右鍵單擊Eclipse中的輸出窗口,選擇Perferences
  • 更改「控制檯緩衝區大小(字)」是你想要的限制。

理想情況下,它會將其更改爲高於您爲此程序打印的最大字符數。也許像800,000?


繼承人喜好窗口的圖片。 enter image description here

編輯:這個問題讓我想起another interesting question其中問題的答案裏面的文字換行是如何在終端輸出進行撒謊。與這個問題並不完全相同,但它是相關的且相當有趣的問題/答案。它值得一讀,這絕對是一個值得學習的教訓。