2016-03-07 16 views
5

Tôi đang in 2 dòng cho bảng điều khiển. Cả hai đều in, nhưng khi chữ thứ hai được in, chữ cái thứ nhất sẽ thay đổi thành chữ thứ hai, vì vậy 2 dòng giống hệt nhau. Tôi chưa bao giờ gặp điều này trước đây. Tại sao bản in thứ hai ghi đè lên bản in đầu tiên và cách khắc phục nó?Hệ thống in 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)); 
} 

Các constructor:

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); 
    } 
} 

Phần còn lại của mã:

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

Phương thức khởi tạo 'MergeSort' của bạn làm gì với' MergeSort (90000) 'mới? Và, lệnh 'mergeSort (array, 1, array.length)' của bạn làm gì? –

+0

@ElliottFrisch Mã bạn yêu cầu hiện đã được thêm vào. – Jesper

+0

Tôi * đề nghị * bạn hãy thử một trình gỡ lỗi. –

Trả lời

5

Điều này là do giới hạn bộ đệm của giao diện điều khiển trong IDE của bạn. Tôi không thể giải thích lý do tại sao chính xác bạn đang nhìn thấy đầu ra trùng lặp của một số chuỗi khác hơn để nói nó trông giống như theres một lỗi trong cách nó xóa các ký tự cũ trong bộ đệm khi nó chạm đến giới hạn.

Tôi nghĩ Eclipse đi kèm với giới hạn mặc định là 80.000 ký tự trong đầu ra bảng điều khiển của nó. Vì bạn đang in 90.000 con số từ 1-100 hai lần có nghĩa là bạn đã quay bộ đệm này và sau đó một số.

Để tăng giới hạn bộ đệm trên console:

  • Nhấp chuột phải vào cửa sổ đầu ra trong Eclipse và chọn Perferences
  • Thay đổi "kích thước điều khiển đệm (ký tự)" là giới hạn của bạn mong muốn.

Lý tưởng sẽ thay đổi thành thứ gì đó cao hơn các ký tự tối đa bạn in ra cho chương trình này. Có thể là 800.000?


Có một hình ảnh về cửa sổ tùy chọn. enter image description here

Edit: Câu hỏi này nhắc tôi nhớ đến another interesting question trong đó câu trả lời cho câu hỏi nói dối bên trong như thế nào gói được thực hiện từ trong đầu ra thiết bị đầu cuối. Không thực sự giống như câu hỏi này nhưng nó có liên quan và khá là một câu hỏi/câu trả lời thú vị. Nó đáng đọc và chắc chắn là một bài học để được học trong tất cả những điều này.

Các vấn đề liên quan