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

[SOLUCIONADO] Error con arrays en Java

Estas en el tema de Error con arrays en Java en el foro de Java en Foros del Web. Hola. Soy nuevo en Java, y realizando un ejercicio en el que debo manejar arrays me ha salido un error de nullPointerException, pero no comprendo ...
  #1 (permalink)  
Antiguo 21/03/2015, 17:32
inazense
Invitado
 
Mensajes: n/a
Puntos:
Pregunta Error con arrays en Java

Hola. Soy nuevo en Java, y realizando un ejercicio en el que debo manejar arrays me ha salido un error de nullPointerException, pero no comprendo por qué.

El error concreto es el siguiente:
Exception in thread "main" java.lang.NullPointerException
at trafico.Persona.compraCoche(Persona.java:22)
at trafico.PruebaClasesP2.main(PruebaClasesP2.java:11 )

El código del programa es:
PruebaClasesP2
Código Java:
Ver original
  1. package trafico;
  2.  
  3. public class PruebaClasesP2 {
  4.  
  5.     public static void main(String[] args) {
  6.         Persona inazio = new Persona("Inazio","Claver","00000000A");
  7.         Coche[] coches;
  8.         coches = new Coche[10];
  9.         coches[0] = new Coche("0789A",90,7.5,220);
  10.        
  11.         inazio.compraCoche(coches[0]);
  12.         inazio.usaCoche(65, 120);
  13.         coches[0].repostar(50);
  14.         coches[0].arrancarMotor();
  15.         inazio.usaCoche(65, 120);
  16.        
  17.  
  18.     }
  19.  
  20. }

Persona
Código Java:
Ver original
  1. package trafico;
  2.  
  3. public class Persona {
  4.     // Propiedades
  5.     private String nombre;
  6.     private String apellido;
  7.     private String dni;
  8.     private Coche[] coche;
  9.     private int numCochesActual = 0; // Máximo 10
  10.     private int cocheEnUso;
  11.    
  12.    
  13.     // Constructor
  14.     public Persona(String nom, String apellidos, String dni){
  15.         nombre = nom;
  16.         apellido = apellidos;
  17.         this.dni = dni;
  18.     }
  19.    
  20.     public void compraCoche(Coche c){
  21.         if (numCochesActual < 10){
  22.             coche[numCochesActual] = c;
  23.             c.setPropietario(this);
  24.             numCochesActual++;
  25.         }
  26.         else{
  27.             System.out.println("Ya tienes diez coches. No puedes comprar más");
  28.         }
  29.     }
  30.    
  31.     public boolean poseeCoche(){
  32.         if (numCochesActual == 0)
  33.             return false;
  34.         else
  35.             return true;
  36.     }
  37.    
  38.     public void eligeCocheEnUso(int num){
  39.         if (num < 0 || num > numCochesActual){
  40.             cocheEnUso = num-1; // Número de coche - 1 para posición en tabla
  41.         }
  42.         else{
  43.             System.out.println(nombre+" "+apellido+" no tiene esa cantidad de coches");
  44.         }
  45.     }
  46.    
  47.     public void usaCoche(double distancia, double velocidad){
  48.         if (poseeCoche() == false)
  49.             System.out.println(nombre+" "+apellido+" no tiene coche en propiedad");
  50.         else{
  51.             if (numCochesActual == 1){
  52.                 coche[0].arrancarMotor();
  53.                 coche[0].fijarVelocidad(velocidad);
  54.                 coche[0].recorrerDistancia(distancia);
  55.             }
  56.             else{
  57.                 coche[cocheEnUso].arrancarMotor();
  58.                 coche[cocheEnUso].fijarVelocidad(velocidad);
  59.                 coche[cocheEnUso].recorrerDistancia(distancia);
  60.             }
  61.         }
  62.     }
  63.    
  64.     public Coche[] getCoche() {
  65.         return coche;
  66.     }
  67.  
  68.     public void imprimirDatosPersonales(){
  69.         int i;
  70.         System.out.println("Nombre: "+nombre);
  71.         System.out.println("Apellido: "+apellido);
  72.         System.out.println("DNI: "+dni);
  73.        
  74.         if (numCochesActual == 0)
  75.             System.out.println("No tiene coche actualmente");
  76.         else
  77.             for (i=0;i<10;i++)
  78.                 System.out.println("Coche: "+coche[i].getMatricula());
  79.     }
  80. }

Coche
Código Java:
Ver original
  1. package trafico;
  2.  
  3. public class Coche {
  4.     // Propiedades independientes del estado
  5.     private String matricula;
  6.     private double maxLitrosDeposito;
  7.     private double maxLitrosReserva;
  8.     private double velocidadMaxima; // Mayor o igual a 0, en km/h
  9.     private double consumoMedio100km; // Litros consumidos a 100km/h durante 100km
  10.     private Persona propietario;
  11.    
  12.     // Propiedades que definen el estado del coche
  13.     private boolean motorArrancado;
  14.     private boolean estaEnReserva;
  15.     private double numLitrosActual;
  16.     private double velocidadActual; // Mayor o igual a 0, en km/h
  17.     private double kilometraje;
  18.    
  19.     // Constructor
  20.     public Coche(String mat, double maxLitrosDeposito, double consumoMedio, double velocidadMax){
  21.         matricula = mat;
  22.        
  23.         // Deposito
  24.         if (maxLitrosDeposito > 0)
  25.             this.maxLitrosDeposito = maxLitrosDeposito;
  26.         else
  27.             this.maxLitrosDeposito = 50;
  28.        
  29.         // Consumo medio
  30.         if (consumoMedio > 0)
  31.             consumoMedio100km = consumoMedio;
  32.         else
  33.             consumoMedio100km = 7.5;
  34.        
  35.         // Velicidad máxima
  36.         if (velocidadMax > 0)
  37.             velocidadMaxima = velocidadMax;
  38.         else
  39.             velocidadMaxima = 180;
  40.        
  41.         // Reserva de depósito
  42.         maxLitrosReserva = (maxLitrosDeposito / 100)*15;
  43.     }
  44.  
  45.     // Getters y setters
  46.     public void setMatricula(String matricula) {
  47.         this.matricula = matricula;
  48.     }
  49.    
  50.     public String getMatricula() {
  51.         return matricula;
  52.     }
  53.  
  54.     public double getMaxLitrosDeposito() {
  55.         return maxLitrosDeposito;
  56.     }
  57.  
  58.     public double getMaxLitrosReserva() {
  59.         return maxLitrosReserva;
  60.     }
  61.  
  62.     public double getVelocidadMaxima() {
  63.         return velocidadMaxima;
  64.     }
  65.  
  66.     public double getConsumoMedio100km() {
  67.         return consumoMedio100km;
  68.     }
  69.  
  70.     public boolean isMotorArrancado() {
  71.         return motorArrancado;
  72.     }
  73.  
  74.     public boolean isEstaEnReserva() {
  75.         return estaEnReserva;
  76.     }
  77.  
  78.     public double getNumLitrosActual() {
  79.         return numLitrosActual;
  80.     }
  81.  
  82.     public double getVelocidadActual() {
  83.         return velocidadActual;
  84.     }
  85.  
  86.     public double getKilometraje() {
  87.         return kilometraje;
  88.     }
  89.    
  90.     public Persona getPropietario(){
  91.         return propietario;
  92.     }
  93.    
  94.     public void setPropietario(Persona p){
  95.         propietario = p;
  96.     }
  97.    
  98.     // Métodos
  99.     public void arrancarMotor(){
  100.         if (motorArrancado == true){
  101.             System.out.println("El coche con matricula "+matricula+" ya tenía el motor arrancado");
  102.         }
  103.         else{
  104.             if (numLitrosActual > 0){
  105.                 if (estaEnReserva == true){
  106.                     motorArrancado = true;
  107.                     System.out.println("El coche con matricula "+matricula+" está en reserva, pero arranca");
  108.                 }
  109.                 else{
  110.                     motorArrancado = true;
  111.                     System.out.println("El coche con matricula "+matricula+" ha arrancado");
  112.                 }
  113.             }
  114.             else{
  115.                 System.out.println("El coche con matricula "+matricula+" no tiene gasolina para arrancar");
  116.             }
  117.         }
  118.     }
  119.    
  120.     public void pararMotor(){
  121.         if (motorArrancado == true){
  122.             motorArrancado = false;
  123.             System.out.println("El coche con matricula "+matricula+" ha parado su motor");
  124.         }
  125.     }
  126.    
  127.     public void repostar(double litros){
  128.         if (litros > 0){
  129.             if (numLitrosActual + litros > maxLitrosDeposito){
  130.                 System.out.println("El coche con matricula "+matricula+" desbordaría su depósito");
  131.             }
  132.             else{
  133.                 numLitrosActual = numLitrosActual + litros;
  134.                 if (numLitrosActual <= maxLitrosReserva)
  135.                     estaEnReserva = true;
  136.                 else
  137.                     estaEnReserva = false;
  138.                
  139.                 System.out.println("El coche con matricula "+matricula+" ha repostado correctamente");
  140.             }
  141.         }
  142.        
  143.         System.out.println("El coche con matricula "+matricula+" tiene "+numLitrosActual+" litros de combustible");
  144.     }
  145.    
  146.     public void fijarVelocidad(double velocidad){
  147.         if (motorArrancado == true){
  148.             if (velocidad > velocidadMaxima)
  149.                 velocidadActual = velocidadMaxima;
  150.             else if (velocidad < 0)
  151.                 velocidadActual = 0;
  152.             else
  153.                 velocidadActual = velocidad;
  154.         }
  155.         else{
  156.             System.out.println("El coche con matricula "+matricula+" tiene el motor apagado");
  157.         }
  158.        
  159.         System.out.println("El coche con matricula "+matricula+" tiene una velocidad de "+velocidadActual+" km/h");
  160.     }
  161.    
  162.     public void recorrerDistancia(double kilometros){
  163.        
  164.         double consumoInstantaneo;
  165.         double litrosNecesarios;
  166.         double distanciaReal;
  167.  
  168.         if (motorArrancado == false || velocidadActual == 0){
  169.             System.out.println("El coche con matricula "+matricula+" tiene el motor apagado. No recorrerá esa distancia");
  170.         }
  171.         else{
  172.             if (kilometros <= 0)
  173.                 System.out.println("Los kilómetros introducidos son negativos o 0. Imposible correr esa distancia");
  174.             else{
  175.                 consumoInstantaneo = consumoMedio100km * (1+(velocidadActual - 100)/100);
  176.                 litrosNecesarios = kilometros * consumoInstantaneo / 100;
  177.                
  178.                 if (litrosNecesarios < numLitrosActual){
  179.                     numLitrosActual = numLitrosActual - litrosNecesarios;
  180.                     kilometraje = kilometraje + kilometros;
  181.                    
  182.                     System.out.println("El coche con matricula "+matricula+" ha recorrido "+kilometros+" kilómetros");
  183.                    
  184.                     if (numLitrosActual <= maxLitrosReserva){
  185.                         estaEnReserva = true;
  186.                         System.out.println("El coche con matricula "+matricula+" ha entrado en reserva");
  187.                     }
  188.                 }
  189.                 else{
  190.                     distanciaReal = 100 * numLitrosActual / consumoInstantaneo;
  191.                     kilometraje = kilometraje + distanciaReal;
  192.                     numLitrosActual = 0;
  193.                     System.out.println("El coche con matrícula "+matricula+" ha recorrido "+distanciaReal+" kilómetros");
  194.                     System.out.println("El coche con matrícula "+matricula+" está sin gasolina");
  195.                     System.out.println("El coche con matrícula "+matricula+" está parado");
  196.                 }
  197.             }
  198.         }
  199.     }
  200.    
  201.     public boolean poseePropieatario(){
  202.         if (propietario == null)
  203.             return false;
  204.         else
  205.             return true;
  206.     }
  207. }

El problema está en la función compraCoche de la clase Persona, pero no comprendo cual es
  #2 (permalink)  
Antiguo 21/03/2015, 19:56
 
Fecha de Ingreso: diciembre-2014
Ubicación: Lima
Mensajes: 68
Antigüedad: 9 años, 11 meses
Puntos: 0
Respuesta: Error con arrays en Java

en realidad no entiendo que hace tu aplicacion, ya que no pones el algoritmo pero pude hacerla funcionar, pues el objetivo de este tema es el nullpointerException
El null pointer exception es por que no inicializaste el array Coche[]
Lo que hize fue esto:

private Coche[] coche = new Coche[1];

probe con varios numeros pero el resultado es el siguiente.


El coche con matricula 0789A no tiene gasolina para arrancar
El coche con matricula 0789A tiene el motor apagado
El coche con matricula 0789A tiene una velocidad de 0.0 km/h
El coche con matricula 0789A tiene el motor apagado. No recorrerá esa distancia
El coche con matricula 0789A ha repostado correctamente
El coche con matricula 0789A tiene 50.0 litros de combustible
El coche con matricula 0789A ha arrancado
El coche con matricula 0789A ya tenía el motor arrancado
El coche con matricula 0789A tiene una velocidad de 120.0 km/h
El coche con matricula 0789A ha recorrido 65.0 kilómetros

Espero que apartir de aca, puedas conseguir tu objetivo
  #3 (permalink)  
Antiguo 21/03/2015, 20:20
inazense
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Error con arrays en Java

Cita:
Iniciado por jelastic Ver Mensaje
en realidad no entiendo que hace tu aplicacion, ya que no pones el algoritmo pero pude hacerla funcionar, pues el objetivo de este tema es el nullpointerException
El null pointer exception es por que no inicializaste el array Coche[]
Lo que hize fue esto:

private Coche[] coche = new Coche[1];

probe con varios numeros pero el resultado es el siguiente.


El coche con matricula 0789A no tiene gasolina para arrancar
El coche con matricula 0789A tiene el motor apagado
El coche con matricula 0789A tiene una velocidad de 0.0 km/h
El coche con matricula 0789A tiene el motor apagado. No recorrerá esa distancia
El coche con matricula 0789A ha repostado correctamente
El coche con matricula 0789A tiene 50.0 litros de combustible
El coche con matricula 0789A ha arrancado
El coche con matricula 0789A ya tenía el motor arrancado
El coche con matricula 0789A tiene una velocidad de 120.0 km/h
El coche con matricula 0789A ha recorrido 65.0 kilómetros

Espero que apartir de aca, puedas conseguir tu objetivo
El programa no tiene ninguna funcionalidad en sí, es simplemente un ejercicio para poder comprender los arrays.
Gracias por tu respuesta, me sirvió :)

Etiquetas: arrays
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 13:44.