2017-02-20 3 views
-3

Also im Erstellen einer generischen Array-Liste und ich habe ein Problem mit der Get-Methode. Ich habe es den Indexparameter validieren, aber ich möchte auch, dass es die Methode get nicht verwendet, wenn ein eingegebener Parameter außerhalb des gültigen Bereichs liegt. Wenn also jemand fragt, ob er bei Index 20 einen Wert erhalten soll, wenn nur 10 Indizes vorhanden sind, wird eine Fehlermeldung angezeigt und der nächste Code ausgeführt. Jetzt wird es meine Fehlermeldung angezeigt und versuchen Sie immer noch, die get-Methode zu verwenden.Generisches Array List-Problem mit get-Methode (Java)

public class GenericList<X> { 

    // Use an array to create the list 
    private X arr[]; 
    private int size; 

    //Constructor for objects of class GSL 

    public GenericList(){ 
     this.newArray(); 
    } 

    // Create a new array 

    private void newArray(){ 
     arr = (X[]) new Object[10]; 
     size = 0; 
    } 

    // Expand array 

    private void expandArray(){ 
     X[] arr2; 
     arr2 = (X[]) new Object[(int)(arr.length * 1.2)]; 
     //Copy elements from arr to arr2 
     for (int i = 0; i < arr.length; i++) 
      arr2[i] = arr[i]; 
     //Have arr point to new array 
     arr = arr2; 
    } 

    //Return the size of the list 

    public int size(){ 
     return size; 
    } 


    // Add a value to the list 

    public void add(X value){ 
     if (size == arr.length){ 
      this.expandArray(); 
     } 
     arr[size] = value; 
     size++; 
    } 

    // Get the value at the specified location in the list 

    public X get(int index){ 
     if (index < 0 || index >= size) 
      System.out.println("Index out of bounds"); 
     return arr[index]; 
    } 

Grundsätzlich, wenn ich diesen Test-Code ausführen:

GenericList<Integer> arr = new GenericList(); 
list.add(27); 
list.get(100); 

list.get(0); 

Es wird das Array erstellen, fügen Sie 27 mit dem ersten Index, dann wird es stoppen und geben Sie mir den Fehler bei list.get (100). Ich versuche es zu bekommen, um einen Fehler bei diesem Test zu werfen, dann überspringe es und führe list.get (0) aus.

+0

Wenn Sie eine Frage über einen Fehler im Code sind zu fragen, wäre es klug und hilfreich sein, die vollständige Fehlermeldung zu schreiben, und zeigen in Ihr Code, welche Zeile es verursacht. –

+0

Sie müssen eine Ausnahme auslösen, wenn der Index außerhalb der Grenzen liegt. Dein Code tut dies nicht. –

+0

Exception in thread "main" java.lang.Error: Ungelöste Kompilation Problem: \t Diese Methode muss ein Ergebnis vom Typ X \t bei GenericList.get (GenericList.java:52) zurückkehren – PFKrang

Antwort

2

Anstatt einen Fehler auszudrucken, möchten Sie einen Fehler mit der throw-Anweisung auslösen. Sie wollen wahrscheinlich eine ArrayIndexOutOfBoundsException oder etwas ähnliches. Um dies zu tun, sollten Sie einen Scheck am Anfang Ihrer get Methode haben:

public X get(int index) throws ArrayIndexOutOfBoundsException{ 

    if (index < 0 || index >= size) 
     throw new ArrayIndexOutOfBoundsException(); 

    return arr[index]; 
} 

Dann wird das Problem nicht bei der Implementierung ist aber in Ihrem Testcode. Sie wollen Ihr Testcode nicht zu stoppen, wenn list.get(100); einen Fehler wirft:

GenericList<Integer> arr = new GenericList(); 
list.add(27); 

try { 

    list.get(100); 

} 
catch (Exception e) { 

    System.out.println(e); 

} 

list.get(0);