2016-03-07 11 views
5

Sto stampando 2 linee sulla console. Entrambi stampano, ma quando viene stampato il secondo, il primo cambia al secondo, quindi le 2 linee sono identiche. Non l'ho mai incontrato prima. Perché la seconda stampa sovrascrive la prima e come la aggiusto?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)); 
} 

Il costruttore:

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

Resto del Codice:

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

Cosa fa il costruttore 'MergeSort' con' new MergeSort (90000) '? E, cosa fa l'istruzione 'mergeSort (array, 1, array.length)'? –

+0

@ElliottFrisch Il codice richiesto è stato ora aggiunto. – Jesper

+0

I * suggerisco * si prova un debugger. –

risposta

5

Ciò è dovuto il limite di buffer della console nel vostro IDE. Non riesco a spiegare perché esattamente stai vedendo l'output duplicato di alcune stringhe oltre a dire che sembra che ci sia un bug nel modo in cui cancella i vecchi caratteri nel buffer quando raggiunge il limite.

Penso che Eclipse abbia un limite predefinito di 80.000 caratteri nell'output della console. Dal momento che stai stampando 90.000 numeri tra 1-100 due volte questo significa che hai sparato su questo buffer e poi su alcuni.

Per aumentare il limite di buffer sulla console:

  • Fare clic destro sulla finestra di uscita in Eclipse e selezionare Perferences
  • cambiamento "dimensione del buffer Console (caratteri)" per essere il vostro limite desiderato.

Idealmente lo cambierebbe a qualcosa di più elevato dei caratteri massimi stampati per questo programma. Forse qualcosa come 800.000?


Ecco un'immagine della finestra delle preferenze. enter image description here

Edit: Questa domanda mi ha ricordato di another interesting question in cui la risposta alla domanda mentito all'interno come il ritorno a capo è stata eseguita nel terminale di uscita. Non proprio la stessa di questa domanda, ma è una domanda/risposta piuttosto interessante e relativa. Vale la pena leggere e c'è sicuramente una lezione da imparare in tutto questo.