Foros del Web » Programación para mayores de 30 ;) » Java »

Problema de Novato: java.lang.NullPointerException

Estas en el tema de Problema de Novato: java.lang.NullPointerException en el foro de Java en Foros del Web. Os comento mi problema por si alguien puede echarme un cable...estoy realizando un curso de Iniciación a java del ministerio de educación donde se plantea ...
  #1 (permalink)  
Antiguo 10/06/2013, 15:23
 
Fecha de Ingreso: marzo-2006
Mensajes: 133
Antigüedad: 18 años, 1 mes
Puntos: 6
Problema de Novato: java.lang.NullPointerException

Os comento mi problema por si alguien puede echarme un cable...estoy realizando un curso de Iniciación a java del ministerio de educación donde se plantea el siguiente problema (mi duda es solo la parte de incrementar los litros de aceite):

Desarrollar una clase llamada Motor que:

• Tenga dos atributos private de tipo int (litros de aceite) y de tipo int (CV).
• Tenga un constructor con un parámetro de tipo int para los CV. Los litros de aceite por defecto serán 0.
• Tenga un getter para cada uno de los atributos.
• Tenga un setter para los litros.

Desarrollar una clase llamada Coche que:

• Tenga un atributo private de tipo Motor, un atributo de tipo String (marca), otro de tipo String (modelo) y otro de tipo double con el precio acumulado con las averías.
• Tenga un constructor con dos parámetros de tipo String que inicialice la marca y el modelo.
• Tenga un getter para cada uno de los atributos.
• Un método acumularAveria que incrementará el importe gastado en averías.

Desarrollar una clase llamada Garaje que:

• Tendrá tres atributos, un coche, un String con la avería asociada y el número de coches que ha ido atendiendo.
• El garaje solo podrá atender a un coche en cada momento. Controlar esta premisa.
• Tenga un método aceptarCoche que recibe un parámetro de tipo Coche y la avería asociada. El garaje solo podrá atender a un coche en cada momento. Si ya esta atendiendo uno, que devuelva un false.
• Tenga un método devolverCoche que dejara al garaje en estado de aceptar un nuevo coche.

Desarrollar una clase llamada Actividad2 que en su método main:

• Cree un garaje.
• Cree 2 coches.
• El garaje irá cogiendo los coches y devolviéndolos, acumulando un importe aleatorio (Math.random()) de la avería tratada.
• Si la avería del coche es “aceite” incrementar en 10 los litros de aceite.
• Los coches entrarán al menos 2 veces en el garaje.
• Mostrar la información de los coches al final del main.


Nota: Para calcular un número aleatorio usaremos Math.random() que devuelve un double entre 0.0 y 1.0


MI SOLUCION ES:

- CLASE MOTOR -


Código Java:
Ver original
  1. public class Motor {
  2.  
  3. private int litros;
  4. private int cv;
  5.  
  6. public Motor (int caballos){
  7.  
  8. this.litros = 0;
  9. this.cv = caballos;
  10.  
  11.  
  12. }
  13.  
  14. //getters
  15.  
  16. public int getLitros(){
  17.  
  18. return this.litros;
  19. }
  20.  
  21. public int getCV(){
  22.  
  23. return this.cv;
  24. }
  25.  
  26. //setters
  27.  
  28. public void setLitros(int l){
  29.  
  30. litros=l;
  31.  
  32. }
  33.  
  34. }
- CLASE COCHE -

Código Java:
Ver original
  1. public class Coche {
  2.  
  3. private Motor motor;
  4. private String marca;
  5. private String modelo;
  6. private double precio_averias;
  7.  
  8. public Coche (String mar, String mod){
  9.  
  10. this.marca = mar;
  11. this.modelo = mod;
  12. }
  13.  
  14.  
  15. //getters
  16.  
  17. public Motor getMotor(){
  18. return this.motor;
  19. }
  20.  
  21. public String getMarca(){
  22. return this.marca;
  23. }
  24.  
  25. public String getModelo(){
  26. return this.modelo;
  27. }
  28.  
  29. public double getPrecioAverias(){
  30. return this.precio_averias;
  31. }
  32. //Metodo que incrementa gasto en averias
  33. public void acumularAveria (double averia){
  34.  
  35. System.out.println("Precio del arreglo: " +averia);
  36. this.precio_averias = this.precio_averias + averia;
  37. }

- CLASE GARAJE -


Código Python:
Ver original
  1. public class Garaje {
  2.  
  3. private Coche c;
  4. private String averia_asociada;
  5. private int num_coches;
  6. int l=0;
  7.  
  8.  
  9. public Garaje(){
  10.  
  11. this.c = null;
  12. this.averia_asociada = "";
  13. this.num_coches = 0;
  14.  
  15. }
  16. public void aceptarCoches (Coche coche, String averiacoche){
  17.  
  18. this.c=coche;
  19. this.averia_asociada = averiacoche;
  20.  
  21. if (num_coches==0){
  22. System.out.println("El coche ha podido entrar");
  23.  
  24.  
  25. num_coches=1;
  26.  
  27. /*AQUI ESTA MI PROBLEMA, COMO ACUMULO LOS LITROS DE ACEITE PARA CADA COC HE?*/
  28.  
  29. if(this.averia_asociada.equals("aceite")){
  30.  
  31. int lit=c.getMotor().getLitros();
  32. this.c.getMotor().setLitros(lit);
  33.  
  34.  
  35. System.out.println("Total de litros de aceite repostados por este coche: " +c.getMotor().getLitros());
  36. }
  37.  
  38. coche.acumularAveria(100*Math.random());
  39.  
  40. }
  41. else{
  42. System.out.println("El garaje se encuentra ocupado");
  43. }
  44.  
  45. }
  46.  
  47. public void devolverCoches (){
  48.  
  49. System.out.println("Un coche sale del garaje");
  50. num_coches = 0;
  51.  
  52. }
  53.  
  54. }
-CLASE ACTIVIDAD 2-

Código Java:
Ver original
  1. public class Actividad2 {
  2.  
  3.  
  4. public static void main(String[] args) {
  5.  
  6. Garaje garaje = new Garaje();
  7.  
  8. Motor coche2= new Motor(110);
  9. Coche primero = new Coche("Peugeot","205");
  10. Coche segundo = new Coche("Seat","Leon");
  11.  
  12.  
  13.  
  14.  
  15.  
  16. garaje.aceptarCoches(primero,"aceite");
  17.  
  18. garaje.aceptarCoches(segundo,"filtros");
  19.  
  20. garaje.devolverCoches();
  21.  
  22. garaje.aceptarCoches(segundo,"aceite");
  23.  
  24. garaje.devolverCoches();
  25.  
  26. garaje.aceptarCoches(primero,"motor");
  27.  
  28. garaje.devolverCoches();
  29.  
  30. garaje.aceptarCoches(segundo,"aceite");
  31.  
  32.  
  33. primero.getPrecioAverias();
  34.  
  35. System.out.println("El coche: " + primero.getMarca() + " " +primero.getModelo()+ " se ha gastado: " +primero.getPrecioAverias());
  36.  
  37. System.out.println("El coche: " + segundo.getMarca() + " " +segundo.getModelo()+ " se ha gastado: " +segundo.getPrecioAverias());
  38.  
  39.  
  40.  
  41.  
  42. }
  43.  
  44.  
  45.  
  46. }



Mi problema es como acumular los litros de aceite a cada coche, parece que me falta inicializar el motor pero no se como... Agradeceria cualquier tipo de ayuda. MUCHAS GRACIAS!!

Última edición por razpeitia; 11/06/2013 a las 07:41
  #2 (permalink)  
Antiguo 11/06/2013, 01:33
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 8 meses
Puntos: 188
Respuesta: Problema de Novato: java.lang.NullPointerException

tendrás que crear o bien un inicializador de motor con valores fijos o uno que atienda a las especificaciones (marca y modelo) del vehículo y devuelva un motor con diferente volumen de aceite y cv según estos valores.

Así que tienes estas opciones

Código Java:
Ver original
  1. public Coche (String mar, String mod){
  2.  
  3. this.marca = mar;
  4. this.modelo = mod;
  5. this.motor = new Motor(litrosEstandar,cvEstandar); // con los valores que le quieras dar tú
  6. }

o

Código Java:
Ver original
  1. public Coche (String mar, String mod){
  2.  
  3. this.marca = mar;
  4. this.modelo = mod;
  5. this.motor = obtenerMotor(mar,mod);
  6. }
  7.  
  8. public Motor obtenerMotor(String marca, String modelo) {
  9. if (marca.toLowerCase().equals("audi")) {
  10. if (modelo.toLowerCase().equals("tt")) {
  11. return new Motor(volumenAudiTT,cvAudiTT); // con los valores que le quieras dar tú
  12. } ... etc
  13. }... etc
  14. }
  15. }
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}

Última edición por razpeitia; 11/06/2013 a las 07:42

Etiquetas: clase, metodo, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:46.