2017-02-18 1 views
1

Des Versuch, zwei sortierte Arrays zusammen zu fusionieren, aber ich erhalte einen Fehler:Fehler: inkompatible Typen: int [] kann nicht konvertiert werden, um zu int bei dem Versuch, zwei sortierte Arrays zu fusionieren

Fehler: inkompatible Typen: int [] kann nicht in int umgewandelt werden

Ich habe ein wenig Forschung, aber ich konnte nicht wirklich herausfinden, warum das passiert. Ich weiß, dass mein Programm ein Problem mit dem sortierten Array hat, aber ich bin mir nicht sicher, was das Problem wäre.

Hier ist mein Code:

public class MedianOfTwoSortedArrays 
{ 
    //[1,2],{3,4} 
    static int[] nums1 = new int[]{1, 3}; 
    static int[] nums2 = new int[]{2}; 


    public static void main(String args[]) 
    { 
     System.out.println(findMedianSortedArrays(nums1, nums2)); 
    } 

     public static int findMedianSortedArrays(int[] nums1, int[] nums2) 
     { 
      int[] sorted = new int[nums1.length + nums2.length]; 
      int i = 0, j = 0, k = 0; 

      while (i < nums1.length && j < nums2.length) 
      { 
       if (nums1[i] < nums2[j]) 
       { 
        sorted[k] = nums1[i]; 
        i++; 
       } 
       else 
       { 
        sorted[k] = nums2[j]; 
        j++; 
       } 
       k++; 
      } 

      while (i < nums1.length) 
      { 
       sorted[k] = nums1[i]; 
       i++; 
       k++; 
      } 

      while (j < nums2.length) 
      { 
       sorted[k] = nums2[j]; 
       j++; 
       k++; 
      } 

      return sorted; 
     } 

} 
+0

In welcher Zeile ist der Fehler aufgetreten? – deltab

Antwort

-1

Der erste Fehler, den Sie tun, ist, dass Sie Int Array zurückgeben und Ihre Methode Rückgabetyp ist Int.

public class MedianOfTwoSortedArrays 
    { 
     //[1,2],{3,4} 
     static int[] nums1 = new int[]{1, 3}; 
     static int[] nums2 = new int[]{2}; 


     public static void main(String args[]) 
     { 
      int a[] = findMedianSortedArrays(nums1, nums2); 

      for(int i=0;i<a.length;i++){ 
       System.out.println(a[i]); 
      } 
      } 

      public static int[] findMedianSortedArrays(int[] nums1, int[] nums2) 
      { 
       int[] sorted = new int[nums1.length + nums2.length]; 
       int i = 0, j = 0, k = 0; 

       while (i < nums1.length && j < nums2.length) 
       { 
        if (nums1[i] < nums2[j]) 
        { 
         sorted[k] = nums1[i]; 
         i++; 
        } 
        else 
        { 
         sorted[k] = nums2[j]; 
         j++; 
        } 
        k++; 
       } 

       while (i < nums1.length) 
       { 
        sorted[k] = nums1[i]; 
        i++; 
        k++; 
       } 

       while (j < nums2.length) 
       { 
        sorted[k] = nums2[j]; 
        j++; 
        k++; 
       } 

       return sorted; 
      } 

    } 

Sie müssen das Ergebnis in Array und Schleife über es speichern.

1

Quick Fix! Ändern Sie einfach Ihre return-Anweisung zu:

return sorted[sorted.length/2]; 

Sie kehrten einen int [] (die sortierte Array) anstelle des Medianwert der sortierten Array.

Ich testete mit einer geraden Anzahl von Elementen und es gibt den ersten der beiden mittleren Werte fyi zurück. Sie können überprüfen, ob die kombinierte Länge zu Beginn Ihrer Methode ungerade ist, wenn Sie möchten. Odd funktioniert wie erwartet. Vergiss nicht, bitte zu akzeptieren!

+0

Code wird wegen inkompatibler Rückgabetypen nicht einmal kompiliert. – Maverick

+0

Sie verwenden wahrscheinlich die Version, in der Sie die Methodensignatur geändert haben. –

+0

Hier ist der Code, den ich mit erwartetem Verhalten kompiliere. Habe nur meine Veränderung gemacht. https://gist.github.com/mrgoodrich/a32a6b7d2b043ba705d5fa9d4873d97b –

0

Sie geben Array zurück und Ihre Methode sagt int, aufgrund welcher Code wird nicht sogar kompilieren. Verwenden

public static int[] findMedianSortedArrays(int[] nums1, int[] nums2) 

anstelle von

public static int findMedianSortedArrays(int[] nums1, int[] nums2) 

Sie müssen auch in der Hauptmethode resultierenden Array iterieren auf Werte zu drucken.

+1

Die Rückgabe von int [] verletzt das erwartete Methodenverhalten. Sie versuchen, einen einzelnen Medianwert zu erhalten, nicht das sortierte Array. –

Verwandte Themen