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
package trafico; public class PruebaClasesP2 { Persona inazio = new Persona("Inazio","Claver","00000000A"); Coche[] coches; coches = new Coche[10]; coches[0] = new Coche("0789A",90,7.5,220); inazio.compraCoche(coches[0]); inazio.usaCoche(65, 120); coches[0].repostar(50); coches[0].arrancarMotor(); inazio.usaCoche(65, 120); } }
Persona
Código Java:
Ver original
package trafico; public class Persona { // Propiedades private Coche[] coche; private int numCochesActual = 0; // Máximo 10 private int cocheEnUso; // Constructor nombre = nom; apellido = apellidos; this.dni = dni; } public void compraCoche(Coche c){ if (numCochesActual < 10){ coche[numCochesActual] = c; c.setPropietario(this); numCochesActual++; } else{ } } public boolean poseeCoche(){ if (numCochesActual == 0) return false; else return true; } public void eligeCocheEnUso(int num){ if (num < 0 || num > numCochesActual){ cocheEnUso = num-1; // Número de coche - 1 para posición en tabla } else{ } } public void usaCoche(double distancia, double velocidad){ if (poseeCoche() == false) else{ if (numCochesActual == 1){ coche[0].arrancarMotor(); coche[0].fijarVelocidad(velocidad); coche[0].recorrerDistancia(distancia); } else{ coche[cocheEnUso].arrancarMotor(); coche[cocheEnUso].fijarVelocidad(velocidad); coche[cocheEnUso].recorrerDistancia(distancia); } } } public Coche[] getCoche() { return coche; } public void imprimirDatosPersonales(){ int i; if (numCochesActual == 0) else for (i=0;i<10;i++) } }
Coche
Código Java:
Ver original
package trafico; public class Coche { // Propiedades independientes del estado private double maxLitrosDeposito; private double maxLitrosReserva; private double velocidadMaxima; // Mayor o igual a 0, en km/h private double consumoMedio100km; // Litros consumidos a 100km/h durante 100km private Persona propietario; // Propiedades que definen el estado del coche private boolean motorArrancado; private boolean estaEnReserva; private double numLitrosActual; private double velocidadActual; // Mayor o igual a 0, en km/h private double kilometraje; // Constructor matricula = mat; // Deposito if (maxLitrosDeposito > 0) this.maxLitrosDeposito = maxLitrosDeposito; else this.maxLitrosDeposito = 50; // Consumo medio if (consumoMedio > 0) consumoMedio100km = consumoMedio; else consumoMedio100km = 7.5; // Velicidad máxima if (velocidadMax > 0) velocidadMaxima = velocidadMax; else velocidadMaxima = 180; // Reserva de depósito maxLitrosReserva = (maxLitrosDeposito / 100)*15; } // Getters y setters this.matricula = matricula; } return matricula; } public double getMaxLitrosDeposito() { return maxLitrosDeposito; } public double getMaxLitrosReserva() { return maxLitrosReserva; } public double getVelocidadMaxima() { return velocidadMaxima; } public double getConsumoMedio100km() { return consumoMedio100km; } public boolean isMotorArrancado() { return motorArrancado; } public boolean isEstaEnReserva() { return estaEnReserva; } public double getNumLitrosActual() { return numLitrosActual; } public double getVelocidadActual() { return velocidadActual; } public double getKilometraje() { return kilometraje; } public Persona getPropietario(){ return propietario; } public void setPropietario(Persona p){ propietario = p; } // Métodos public void arrancarMotor(){ if (motorArrancado == true){ } else{ if (numLitrosActual > 0){ if (estaEnReserva == true){ motorArrancado = true; } else{ motorArrancado = true; } } else{ } } } public void pararMotor(){ if (motorArrancado == true){ motorArrancado = false; } } public void repostar(double litros){ if (litros > 0){ if (numLitrosActual + litros > maxLitrosDeposito){ } else{ numLitrosActual = numLitrosActual + litros; if (numLitrosActual <= maxLitrosReserva) estaEnReserva = true; else estaEnReserva = false; } } System.out.println("El coche con matricula "+matricula+" tiene "+numLitrosActual+" litros de combustible"); } public void fijarVelocidad(double velocidad){ if (motorArrancado == true){ if (velocidad > velocidadMaxima) velocidadActual = velocidadMaxima; else if (velocidad < 0) velocidadActual = 0; else velocidadActual = velocidad; } else{ } System.out.println("El coche con matricula "+matricula+" tiene una velocidad de "+velocidadActual+" km/h"); } public void recorrerDistancia(double kilometros){ double consumoInstantaneo; double litrosNecesarios; double distanciaReal; if (motorArrancado == false || velocidadActual == 0){ System.out.println("El coche con matricula "+matricula+" tiene el motor apagado. No recorrerá esa distancia"); } else{ if (kilometros <= 0) System.out.println("Los kilómetros introducidos son negativos o 0. Imposible correr esa distancia"); else{ consumoInstantaneo = consumoMedio100km * (1+(velocidadActual - 100)/100); litrosNecesarios = kilometros * consumoInstantaneo / 100; if (litrosNecesarios < numLitrosActual){ numLitrosActual = numLitrosActual - litrosNecesarios; kilometraje = kilometraje + kilometros; if (numLitrosActual <= maxLitrosReserva){ estaEnReserva = true; } } else{ distanciaReal = 100 * numLitrosActual / consumoInstantaneo; kilometraje = kilometraje + distanciaReal; numLitrosActual = 0; System.out.println("El coche con matrícula "+matricula+" ha recorrido "+distanciaReal+" kilómetros"); } } } } public boolean poseePropieatario(){ if (propietario == null) return false; else return true; } }
El problema está en la función compraCoche de la clase Persona, pero no comprendo cual es