2015-04-20 17 views
9

Es war eine Frage in meinem Buch, dass dies gesagt (es gibt keine Antworten):Hinzufügen von Werten aus einer Klasse in Java

Angenommen wir eine Klasse Beta mit dem Header deklariert haben:

class Beta extends Alpha 

so Beta ist eine Unterklasse von Alpha, und in der Klasse Alpha gibt es ein Verfahren mit Kopf:

public int value(Gamma gam) throws ValueException 

eine statische Methode ca schreiben lled addValues, das ein Objekt vom Typ ArrayList<Alpha> oder ArrayList<Beta>, und auch ein Objekt vom Typ Gamma nimmt. Ein Aufruf der Methode addValues ​​muss die Summe zurückgeben, die durch Hinzufügen des Ergebnisses eines Aufrufs des Werts zu jedem der -Objekte im ArrayList-Argument mit dem Gamma-Argument als -Argument für jeden Wertaufruf erhalten wurde. Jeder Wertaufruf, der zum Auslösen einer Ausnahme des Typs ValueException führt, sollte in ignoriert werden, um die Summe zu berechnen.

Mein Versuch:

public static int addValues(ArrayList<? extends Alpha> arr, Gamma gam) { 
    int sum = 0; 
    for (int i = 0; i < arr.size(); i++) { 
     try { 
      sum += arr.get(i) + gam; 
     } catch (Exception e) { 
      i++; 
     } 
    } 
    return sum; 
} 

Obwohl ich für den Anfang wissen, dass die Linie sum += arr.get(i) + gam wird mir eine Fehlermeldung geben, weil sie sich nicht gerade nach vorne int s sind, die hinzugefügt werden können. Das Buch liefert keine weiteren Informationen zu der Frage, also was ich hier geschrieben habe, ist alles, was für die Frage benötigt wird.

+0

Die Frage sagt ValueException, nicht Ausnahme. – immibis

Antwort

10

Sie sollten die value Methode aufrufen, um die Werte zu erhalten, die Sie hinzufügen sollen.

Außerdem können Sie die erweiterte for-Schleife verwenden, um Ihren Code sauberer zu machen.

+0

Ahhh ja, ich hätte die Frage besser verstehen sollen! Das habe ich nicht bemerkt, danke! (Wird korrekt markiert, sobald der Timer abgelaufen ist). – Aceboy1993

+0

Sie sollten auch nur eine ValueException pro Problemanweisung abfangen. Wenn Sie eine OutOfMemoryException oder so etwas erhalten, möchten Sie nicht weiter summieren. –

+0

@BrianJ Das ist ein guter Punkt. Vielen Dank. – Eran

1

Verwenden Sie die Wildcard mit begrenztem Typ als Alpha, wenn Sie auf den Wert zugreifen möchten, und verwenden Sie dann arr.

public static int addValues(ArrayList<? extends Alpha> arr, Gamma gam) 
{ 
    int sum = 0; 
    for (Alpha alpha : arr) { 
     try { 
      sum += alpha.value(gam); 
     } catch (Exception e) { 
     } 
    } 
    return sum; 
} 

In Bezug auf die zweite Frage des Überschreiben der gleichen Funktion

public boolean equals(Gamma g) { 
     if(g!= null && g instanceof Alpha && value(g) == value(this.myGam)){ 
      return true; 
     }else{ 
      return false; 
     } 
    } 
+0

Vielen Dank !! – Aceboy1993

Verwandte Themen