2015-04-20 8 views
9

C'era una domanda nel mio libro che ha detto che questo (non ci sono risposte):l'aggiunta di valori da una classe in Java

Supponiamo di avere un Beta classe dichiarata con l'intestazione:

class Beta extends Alpha 

così Beta è una sottoclasse di Alpha, e in classe Alpha c'è un metodo con l'intestazione:

public int value(Gamma gam) throws ValueException 

Scrivete un metodo statico ca lled addValues ​​che accetta un oggetto che può essere di tipo ArrayList<Alpha> o ArrayList<Beta> e anche un oggetto di tipo Gamma. Una chiamata al metodo addValues ​​deve restituire la somma ottenuta aggiungendo il risultato di una chiamata di valore su ciascuno degli oggetti nell'argomento ArrayList, con l'argomento Gamma come argomento per ogni chiamata di valore. Qualsiasi chiamata di valore che provoca un'eccezione di tipo ValueException da gettare deve essere ignorata in calcolando la somma.

Il mio tentativo:

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; 
} 

Anche se so per cominciare che la linea sum += arr.get(i) + gam sta per darmi un errore, perché non sono dritto in avanti int s che possono essere aggiunti. Il libro non fornisce ulteriori informazioni sulla domanda, quindi quello che ho scritto qui è tutto ciò che è necessario per la domanda.

+0

La domanda dice ValueException, non l'eccezione. – immibis

risposta

10

Si suppone che si chiami il metodo value per ottenere i valori che si suppone debbano essere aggiunti.

Oltre a questo, è possibile utilizzare il ciclo avanzato per rendere il codice più pulito.

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

Ahhh sì, avrei dovuto capire meglio la domanda! Non ho notato questo, grazie! (Segnerà correttamente una volta che il timer è passato). – Aceboy1993

+0

Si dovrebbe anche solo prendere un ValueException, secondo la dichiarazione del problema. Se ottieni una OutOfMemoryException o qualcosa del genere, non vorrai continuare a sommare. –

+0

@BrianJ Questo è un buon punto. Grazie. – Eran

1

Usa wild card con il tipo limitato come Alpha come si vuole accedere al valore quindi utilizzare 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; 
} 

Per quanto riguarda la seconda domanda di rilevante della funzione uguale

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

Grazie mille !! – Aceboy1993