2016-03-07 26 views
5

Konsola 2 satır yazdırıyorum. İkisi de basıyor, ancak ikincisi basıldığında, ikincisi ikincisine dönüşüyor, böylece 2 satır aynı. Bunu daha önce hiç karşılaşmadım. İkinci baskı neden birincinin üzerine yazıyor ve bunu nasıl düzeltebilirim?System out 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)); 
} 

yapıcı: kodun

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

istirahat:

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 'yapıcınız' yeni MergeSort (90000)' ile ne yapıyor? Ve, 'mergeSort (dizi, 1, dizi.length) 'komutunuz ne yapar? –

+0

@ElliottFrisch İstediğiniz kod eklendi. – Jesper

+0

I * Öneri * bir hata ayıklayıcısını deneyin. –

cevap

5

Bu IDE'nizde konsolun tampon sınırı kaynaklanmaktadır. Tam olarak niçin belirli dizelerin kopyasını görüyorsanız, arabelleğin sınırına geldiğinde arabellek içindeki eski karakterleri nasıl temizlediğiyle ilgili bir hataya benzediğini söylemek yerine neden açıklayamadım.

Eclipse'in konsol çıkışında varsayılan 80.000 karakter sınırına sahip olduğunu düşünüyorum. 1-100 arasında iki kere 90.000 adet baskı yaptığınız için bu tamponun üzerinde çekim yaptığınız anlamına gelir.

konsolda tampon sınırını artırmak için: Perferences
  • Değişim "Konsol tampon boyutu (karakter)"

    • Sağ Eclipse çıkış penceresini tıklayın nü, istenilen sınır olması.

    İdeal olarak, bu program için yazdırdığınız maksimum karakterden daha yüksek bir değere değiştirebilirsiniz. Belki 800.000 gibi bir şey?


    Her bir tercihler penceresinin resmi. enter image description here

    Düzenleme: Bu soru sorusunun cevabı sözcük kaydırma terminali çıkışında yapıldı nasıl içeriye yalan olduğu another interesting question hatırlattı. Bu soruyla gerçekten aynı değil, ama ilginç ve ilginç bir soru/cevap. Onun bir okumaya değer ve kesinlikle tüm bunların içinde öğrenilecek bir ders var.