2012-04-27 41 views
5

Estoy tratando de trabajar en una tarea de Java. Esto es lo que pregunta:¿Es esta la forma correcta de usar una IllegalArgumentException?

Escriba una clase llamada TestScores. El constructor de clase debe aceptar una matriz de puntajes de prueba como su argumento. La clase debe tener un método que devuelva el promedio de los puntajes de las pruebas. Si un puntaje de prueba en el conjunto es negativo o mayor que 100, la clase debe arrojar un IllegalArgumentException. Demostrar. Necesito un archivo llamado TestScores y TestScoresDemo.

Esto es lo que tengo hasta ahora. Sé que algunos de que es malo y necesito ayuda fijándola:

class TestScores { 
    public static void checkscore(int s) { 
     if (s<0) throw new IllegalArgumentException("Error: score is negative."); 
     else if (s>100) throw new IllegalArgumentException("Error Score is higher then 100"); 
     else if (s>89)throw new IllegalArgumentException("Your grade is an A"); 
     else if (s>79 && s<90)throw new IllegalArgumentException("Your grade is an B"); 
     else if (s>69 && s<80)throw new IllegalArgumentException("Your grade is an C"); 
     else if (s>59 && s<70)throw new IllegalArgumentException("Your grade is an D"); 
     else if (s<60)throw new IllegalArgumentException("Your grade is an F"); 

     { 
      int sum = 0; //all elements together 
      for (int i = 0; i < a.length; i++) 
       sum += a[i]; 
     } 
     return sum/a.length; 
    } 
} 

class TestScoresDemo { 
    public static void main(String[] args) { 
     int score = 0; 
     Scanner scanner = new Scanner(System.in); 
     System.out.print(" Enter a Grade number: "); 
     String input = scanner.nextLine(); 
     score = Integer.parseInt(input); 
     TestScores.checkscore(score); 
     System.out.print("Test score average is" + sum); 
    } 
} 

Conozco las llamadas de asignación para una declaración try porque en mi libro que es lo que veo con el IllegalArgumentException. ¿Alguien puede ayudarme? Estoy usando Eclipse como un IDE.

+2

¿Por qué crees que esto está mal? ¿Recibes un mensaje de error que no deberías? No podemos ayudar si no sabemos qué parte necesita ser reparada. –

+0

Gracias. Déjame revisar y responderte. Tal vez sea simplemente un simple error de tipo – Alexandria

+7

, solo debería lanzar una 'IllegalArgumentException' en los casos en que el argumento no sea válido en su caso por debajo de 0 o por encima de 100. – twain249

Respuesta

3

Su clase TestScores debe tener dos miembros: un constructor que acepta una matriz de puntajes y un método que devuelve el promedio de los puntajes. La asignación no es del todo clara en cuanto a cuál de estos debería arrojar un IllegalArgumentException si el puntaje de una prueba está fuera de rango, pero yo lo convertiría en el constructor (ya que ese es el argumento).

public class TestScores { 
    public TestScores(int[] scores) throws IllegalArgumentException { 
     // test the scores for validity and throw an exception if appropriate 
     // otherwise stash the scores in a field for later use 
    } 

    public float getAverageScore() { 
     // compute the average score and return it 
    } 
} 

estás en el camino correcto con su clase TestScoresDemo. Primero deberá recopilar un conjunto de puntajes en una matriz. Entonces debería construir un objeto TestScores. Esto es lo que debe estar dentro de un bloque try/catch porque puede lanzar una excepción. Entonces solo necesita llamar al getAverageScore() y hacer algo con el resultado.

+0

Gracias a todos. Intentaré revisarlo. Por alguna razón estoy realmente perdido en esta tarea. – Alexandria

+0

@Alexandria: estás intentando hacer demasiado en tu método de "comprobación".Debería simplemente verificar el puntaje y arrojar una 'IllegalArgumentException' si es apropiado; no debería hacer otra cosa. Escriba otros métodos (y un constructor) para hacer otras partes del problema. Eso debería ayudarlo a retomar el rumbo. –

-2
public class TestScores { 
private final int[] scores; 

public TestScores(int[] scores) { 
    this.scores = scores; 
} 

public int getAverage() { 
    int sum = 0; 

    if(scores.length == 0) { 
     return 0; 
    } 

    for(int score: scores) { 
     if(score < 0 || score > 100) { 
      throw new IllegalArgumentException("Score is not valid!"); 
     } 
     sum += score; 
    } 
    return sum/scores.length; 
} 

}

+5

... y una vez que OP copie y pegue esta respuesta, todo el punto de la tarea será irrelevante y el OP no aprenderá nada de ello. –

+0

Wow. Cuando una pregunta está etiquetada como "tarea", es una forma deficiente alimentar a cucharadas una respuesta. Lea la [entrada de las preguntas frecuentes en meta] (http://meta.stackexchange.com/questions/10811/how-to-ask-and-answer-homework-questions) acerca de cómo hacer y responder preguntas sobre la tarea. –

+1

Gracias. Su publicación en realidad ayudó especialmente con el aporte y la ayuda de todos los demás. Puedo ver las diferencias entre los míos. Y tenía algo similar en mi libro para esto ya. Ahora necesito agregar una captura y tratar de descubrir cómo hacerlo correctamente. Gracias a todos. – Alexandria

0

Una excepción es algo que se usa para definir algo que no vaya a la derecha en el flujo normal de una aplicación. Debe lanzar IllegalArgumentException cuando se llama al método checkScore y encuentra cualquier argumento fuera del rango (entre 0 y 100).

Su clase debe tener la siguiente estructura:

clase
public class TestScore { 

    private int scores[]; //With setters and getters. 

    public TestScore(int scores[]) { 
     //Here, you set the scores array to the one on this class. 
    } 

    public int getAverage() { 
     //You do the average here, and since you need to iterate over the 
     //array to sum each value, you can check the value and if it's not 
     //ok you throw the IllegalArgumentException. No throws keyword 
     //required since this kind of exception (like NullPointerException 
     //and many others) are unchecked exceptions, meaning they can be 
     //thrown by a method and it does not need to specify them. 
    } 

} 

La prueba debe crear un objeto TestScore con una matriz int como un parámetro de su constructor. A continuación, crea un método testAverageScore que tiene la instrucción try-catch, ya que es necesario llamar al método getAverage.

Espero que ayude. ¡Buena suerte!.

EDITAR: IllegalArgumentException es una excepción no comprobada.

+0

No hay necesidad de establecer un 'puntaje'; se pasa en el constructor. (Incluso podría ser 'final'.) –

+0

Fue solo para comenzar a fomentar el uso de estándares. ¿Qué pasa si en el futuro quiere establecer una nueva matriz para el mismo objeto? – Gamb

+0

Desde el [Tutorial de Java] (http://docs.oracle.com/javase/tutorial/essential/concurrency/immutable.html): "Un objeto se considera _immutable_ si su estado no puede cambiar después de que se construye. Confianza máxima en los objetos inmutables son ampliamente aceptados como una estrategia sólida para crear código simple y confiable ". –

Cuestiones relacionadas