2016-03-07 11 views
5

सिस्टम कंसोल पर 2 लाइनों को प्रिंट कर रहा है। वे दोनों प्रिंट करते हैं, लेकिन जब दूसरे ने मुद्रित किया है, तो पहला व्यक्ति दूसरे में बदल जाता है, इसलिए 2 लाइनें समान होती हैं। मैंने पहले कभी इसका सामना नहीं किया है। दूसरा प्रिंट पहले व्यक्ति को ओवरराइट क्यों करता है, और मैं इसे कैसे ठीक करूं?प्रिंटल

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

आपका 'मर्जोर्ट' कन्स्ट्रक्टर 'नया मर्जोर्ट (90000)' के साथ क्या करता है? और, आपका 'mergeSort (सरणी, 1, array.length)' निर्देश क्या करता है? –

+0

@ElliottFrisch आपके द्वारा अनुरोधित कोड अब जोड़ा गया है। – Jesper

+0

मैं * सुझाव * आप एक डीबगर का प्रयास करें। –

उत्तर

5

यह आपके IDE में कंसोल के बफर सीमा के कारण है। मैं समझा नहीं सकता कि आप कुछ स्ट्रिंग्स के डुप्लिकेट आउटपुट को क्यों देख रहे हैं, ऐसा कहने के अलावा कि यह बग में पुराने अक्षरों को कैसे साफ़ करता है जब यह सीमा को हिट करता है।

मुझे लगता है कि ग्रहण अपने कंसोल आउटपुट में 80,000 वर्ण सीमा के डिफ़ॉल्ट के साथ आता है। चूंकि आप 1-100 के बीच 90,000 संख्याओं को दो बार प्रिंट कर रहे हैं, इसका मतलब है कि आप इस बफर को शूटिंग कर रहे हैं और फिर कुछ।

कंसोल पर बफर सीमा को बढ़ाने के लिए:

  • अधिकार ग्रहण में उत्पादन खिड़की पर क्लिक करें और चुनें perferences
  • बदलें "कंसोल बफर आकार (अक्षर)" अपने वांछित सीमा होने के लिए।

आदर्श रूप से इस कार्यक्रम के लिए आपके प्रिंटिंग के अधिकतम वर्णों की तुलना में इसे कुछ अधिक में बदल देगा। शायद 800,000 की तरह कुछ?


प्राथमिकता विंडो की एक तस्वीर है। enter image description here

संपादित करें: यह सवाल मुझे another interesting question जिसमें सवाल का जवाब कैसे शब्द रैपिंग टर्मिनल उत्पादन में प्रदर्शन किया गया था अंदर झूठ बोला था की याद दिला दी। वास्तव में इस सवाल के समान नहीं है लेकिन यह संबंधित है और काफी दिलचस्प प्रश्न/उत्तर है। इसके पढ़ने के लायक है और इसमें सब कुछ सीखने के लिए निश्चित रूप से एक सबक है।

संबंधित मुद्दे