2017-01-27 3 views
1

Ich habe Java für ein paar Wochen selbstständig studiert, aber ich bin völlig in einer Challenge Frage stecken geblieben, die ich online gefunden habe. Ich habe Google gründlich durchsucht, um zu sehen, ob jemand anderes danach gefragt hat, aber ich kann nichts finden. Da ich keine Lehrer habe, habe ich mich gefragt, ob jemand bei StackOverflow mir helfen könnte.Neuling hat Probleme mit Arrays

Ich habe ein Problem mit einer meiner Methoden, weil es bei meinen Testfällen versagt und ich bin mir nicht sicher, was es genau falsch macht.

Grundsätzlich, wenn ich ein Array wie [2, 8, 3, 9, 7] eingeben, möchte ich es wie [2, 3, 7, 8, 9] kommen. Aber mit dieser schlecht geschriebenen Methode, die ich hier habe, erhalte ich immer das zusätzliche Element am Anfang, was zu [2, 2, 3, 7, 8, 9] führt. Mein spezifisches Ziel bei dieser Methode ist es, ein Array zu finden und zurückzugeben, das alle Werte enthält, die größer/gleich "hoch" und kleiner als/gleich "niedrig" sind, einschließlich Duplikate. Die Länge dieses Arrays sollte der Anzahl der Elemente im 'Bereich' entsprechen, daher der Methodenname.

Ich wollte nur richtig auf den nächsten Schritt gerichtet sein, den ich ergreifen sollte, um dieses erste Elementproblem zu beseitigen. Ich weiß, dass der Code wahrscheinlich schrecklich und unordentlich ist, also bitte ertragen Sie mit mir.

Danke; Alle Hilfe wird geschätzt!

public static int[] range(int[] a, int low, int high) { 
    if (a == null || a.length == 0) { 
    throw new IllegalArgumentException(); 
    } 

    int[] newArr = new int[0]; 
    if (low <= high) { 
    if (a.length == 1 && low >= a[0] && high <= a[0]) { 
     return a; 
    } 

    for (int i : a) { 
     if (i >= low && i <= high) { 
      int[] duplicate = new int[(a.length + 1)]; 
      int count = 0; 
      for (int num : a) { 
       duplicate[count] = num; 
       count++; 
      } 
      duplicate[count] = i; 
      return duplicate; 
     } 
    } 
    } 
    if (newArr.length > 1) { 
    Arrays.sort(newArr); 
    } 
    return newArr; 

}

+1

Sie brauchen nur die 'Arrays.sort' (und die' null'/'length' Prüfung). Warum der ganze andere Code? –

+0

* Ich versuche nicht einfach, die Methoden zu sortieren, weil das Buch nach etwas anderem verlangt *. Was versuchen Sie dann? – shmosel

+1

Folgen Sie @smossel, was genau versuchen Sie zu tun? Beachten Sie auch, wenn Sie das Duplikat Array erstellen, Sie eine mehr als nötig zuweisen, sollten Sie neue Int [a.length]; – okaram

Antwort

2

Wenn ich Ihre Spezifikation richtig gelesen, nehmen Sie eine Eingabe Array a und zwei Werte low und high. Sie müssen ein neues Array mit nur den Elementen zwischen (einschließlich) low und high zurückgeben.

Sie haben nirgendwo in der Reihenfolge geschrieben, in der die Elemente stehen sollten (außer in Ihrem Testfall, wo die Elemente in aufsteigender Reihenfolge sortiert sind). Hinweis: Sie können die Methode sort() einfach hinzufügen, wenn Sie sie benötigen.

Das Hauptproblem besteht darin, dass Sie die Größe des zurückgegebenen Arrays bestimmen müssen. Es gibt viele Möglichkeiten, dies zu tun. Der Einfachheit halber mache ich das in zwei Schleifen.

public static int[] range(int[] a, int low, int high) { 
    int result_size=0; 
    int i, j; 
    // determine result size 
    for (i=0; i< a.length;i++) { 
    if ((low <= a[i]) && (a[i] <= high)) result_size++; 
    } 
    // build the result array 
    int [] result = new int[result_size]; 
    j = 0; // destination 
    for (i = 0; i < a.length; i++) { 
    if ((low <= a[i]) && (a[i] <= high)) { 
     result[j] = a[i]; 
     j++; 
    } 
    } 
    return result; 
} 
+0

Vielen Dank! Der zweite Foor-Loop bringt mir schon viel mehr über Arrays und Looping-Logik bei. Dies ist genau das, was ich brauchte, um meinen Code aufzuräumen. – Ryu