Problema con programa java...ayuda!

kannabix_v

Lanero Regular
12 Abr 2013
1
Bueno tengo este programa en Java con 4 clases y la parte del Main...soy nuevo en el Foro, tanto asi que esta es la primera vez que me registro en uno asi que no se mucho de esto pero bueno aprendere....asi mismo soy novato en la programacion, a veces no entiendo las cosas y necesito que me las expliquen mucho pero pongo todo de mi parte para aprender porque quiero estudiar y hacer una maestria en esto de la programacion...pero bueno no se desesperen conmigo pero aprendo :p

Bueno aqui el programa para que lo vean y me expliquen donde tengo error o como solucionarlo..ah se me olvidaba el error que tengo es que pone esto al momento de ejecutar y se termina de ejecutar

"Exception in thread "main" java.lang.NullPointerException at TransporteEJECUCION.main(TransporteEJECUCION.java:22)"

Aqui el codigo de cada clase
CLASE CHOFER
public class Chofer {
static int idChofer;
String nombreChofer;
static int rutaAsignada;
static int vehiculoAsignado;

void Chofer(){
this.idChofer=0;
this.nombreChofer="";
this.rutaAsignada=0;
this.vehiculoAsignado=0;
}
void Chofer(int idChofer,String nombreChofer,int rutaAsignada,int vehiculoAsignado){
this.idChofer=idChofer;
this.nombreChofer=nombreChofer;
this.rutaAsignada=rutaAsignada;
this.vehiculoAsignado=vehiculoAsignado;
}
int get_idChofer(){
return(idChofer);
}
String get_nombreChofer(){
return(nombreChofer);
}
int get_rutaAsignada(){
return(rutaAsignada);
}
int get_vehiculoAsignado(){
return(vehiculoAsignado);
}
}
CLASE FLETE
public class Flete extends Chofer{
String nombreEmpresa;
String rfc;
String direccion;

void Flete(){
this.nombreEmpresa="";
this.rfc="";
this.direccion="";
}
void Flete(String nombreEmpresa,String rfc,String direccion){
this.nombreEmpresa=nombreEmpresa;
this.rfc=rfc;
this.direccion=direccion;
}
String get_infoFlete(){
return("Para la empresa "+get_nombreEmpresa()+" con direccion "+get_direccion());
}
String get_nombreEmpresa(){
return(nombreEmpresa);
}
String get_rfc(){
return(rfc);
}
String get_direccion(){
return(direccion);
}
}
CLASE RUTAS (en esta clase tengo un simbolo asi -> ! )
public class Rutas extends Flete {
static int idRuta;
String origen;
String destino;

void Rutas(){
this.idRuta=0;
this.origen="";
this.destino="";
}
void Rutas(int idRuta,String origen,String destino){
this.idRuta=idRuta;
this.origen=origen;
this.destino=destino;
}
int get_idRuta(){
return(idRuta);
}
String get_origendestino(){
return(origen+" A "+destino+" "+get_infoFlete());
}
String nodestino(){
return("VIAJE NO DISPONIBLE.");
}
String rutas_asignadas(){
if(get_rutaAsignada()==get_idRuta())
return(get_origendestino());
if((get_rutaAsignada()==0))
return(nodestino());
}
}
CLASE VEHICULO
public class Vehiculo extends Rutas {
static int idVehiculo;
String marca;
String modelo;
int anio;

void Vehiculo(){
this.idVehiculo=0;
this.marca="";
this.modelo="";
this.anio=0;
}
void Vehiculo(int idVehiculo,String marca,String modelo,int anio){
this.idVehiculo=idVehiculo;
this.marca=marca;
this.modelo=modelo;
this.anio=anio;
}
int get_idVehiculo(){
return(idVehiculo);
}
String get_infovehiculo(){
return("VEHICULO: "+marca+"\n"+"MODELO: "+modelo+"\n"+"AÑO: "+anio+"\n");
}
String novehiculo(){
return("VEHICULO NO DISPONIBLE.");
}
String vehiculos_asignados(){
if(get_vehiculoAsignado()==get_idVehiculo())
return(get_infovehiculo());
if((get_vehiculoAsignado()==0))
return(novehiculo());
}
}
MAIN CLASS TRANSPORTEEJECUCION
import javax.swing.JOptionPane;
import java.awt.*;

class GraphicPanel extends Panel{
GraphicPanel(){
setBackground(Color.WHITE);
}
}
public class TransporteEJECUCION {
public static void main(String[] args) {
Frame f = new Frame("TRANSPORTES EL NORTE");
GraphicPanel gp = new GraphicPanel();
f.add(gp);
f.setSize(600, 300);
f.setVisible(true);
f.setLocation(400, 220);

Vehiculo obj[];
obj=new Vehiculo[5];
int i;
for(i=0;i<5;i++){
obj.Vehiculo();
obj.Rutas();
obj.Flete();
obj.Chofer();
}
// obj[0].Chofer(1, "Carlos Ramirez", 1, 3);
// obj[1].Chofer(2, "Luis Arturo", 2, 2);
// obj[2].Chofer(3, "Manuel López", 4, 1);
// obj[3].Chofer(4, "José Julian", 5, 5);
// obj[4].Chofer(5, "Carlos Montes", 3, 4);

obj[0].Vehiculo(1, "FORD", "Ranger", 2012);
obj[1].Vehiculo(2, "NISSAN", "Urvan", 2013);
obj[2].Vehiculo(3, "CHEVROLET", "Wagon", 1995);
obj[3].Vehiculo(4, "VOLKSWAGEN", "Pointer", 1990);
obj[4].Vehiculo(5, "TOYOTA", "RaV4", 1996);

obj[0].Rutas(1, "Miguel Aleman", "Reynosa");
obj[1].Rutas(2, "Miguel Aleman", "Camargo");
obj[2].Rutas(3, "Miguel Aleman", "Mier");
obj[3].Rutas(4, "Miguel Aleman", "Diaz Ordaz");
obj[4].Rutas(5, "Miguel Aleman", "Río Grande");

obj[0].Flete("CompuClinic", "ASDF1789", "Calle Benito Juarez");
obj[1].Flete("OXXO", "EDCF2486", "Calle Niños Heroes");
obj[2].Flete("Papeleria Jade", "CVBN7419", "Calle Enrique B.Guerra");
obj[3].Flete("Seven Eleven", "PÑLK6074", "Calle Ocampo");
obj[4].Flete("WalMart", "WAMT6620", "HighWay 83");

obj[0].Chofer(1, "Carlos Ramirez", 1, 3);
obj[1].Chofer(2, "Luis Arturo", 2, 2);
obj[2].Chofer(3, "Manuel López", 4, 1);
obj[3].Chofer(4, "José Julian", 5, 5);
obj[4].Chofer(5, "Carlos Montes", 3, 4);

String opcion;
int opcionNum;
do{
opcion=JOptionPane.showInputDialog("1: Rutas asignadas a los choferes.\n+"+"2: Transporte asignado a los choferes."+"3: Datos de los choferes.");
opcionNum=Integer.parseInt(opcion);
}while((opcionNum<0)||(opcionNum>=3));
switch(opcionNum){
case 1:
String RutasAsignadasChofer[];
RutasAsignadasChofer=new String[5];
RutasAsignadasChofer[0]="";
RutasAsignadasChofer[1]="";
RutasAsignadasChofer[2]="";
RutasAsignadasChofer[3]="";
RutasAsignadasChofer[4]="";
int j;
for(j=0;j<5;j++){
RutasAsignadasChofer[j]+="El Chofer "+obj[j].get_idChofer()+" tiene el siguiente viaje: "+obj[j].rutas_asignadas();
JOptionPane.showMessageDialog(null, RutasAsignadasChofer[j], "INFORMACION RUTAS", JOptionPane.INFORMATION_MESSAGE);
}
break;
case 2:
String TransporteAsignadoChofer[];
TransporteAsignadoChofer=new String[5];
TransporteAsignadoChofer[0]="";
TransporteAsignadoChofer[1]="";
TransporteAsignadoChofer[2]="";
TransporteAsignadoChofer[3]="";
TransporteAsignadoChofer[4]="";
int k;
for(k=0;k<5;k++){
TransporteAsignadoChofer[k]+="El Chofer "+obj[k].get_idChofer()+" tiene el siguiente vehiculo: "+obj[k].vehiculos_asignados();
JOptionPane.showMessageDialog(null, TransporteAsignadoChofer[k], "INFORMACION VEHICULOS", JOptionPane.INFORMATION_MESSAGE);
}
break;
case 3:
String DatosChoferes[];
DatosChoferes=new String[5];
DatosChoferes[0]="";
DatosChoferes[1]="";
DatosChoferes[2]="";
DatosChoferes[3]="";
DatosChoferes[4]="";
int l;
for(l=0;l<5;l++){
DatosChoferes[l]+="Chofer # "+obj[l].get_idChofer()+" se llama "+obj[l].get_nombreChofer();
JOptionPane.showMessageDialog(null, DatosChoferes[l], "INFORMACION DE CHOFERES", JOptionPane.INFORMATION_MESSAGE);
}
break;
}
}
}


Ojala y puedan ayudarme, incluso dejo el rar por si quieren ver lo que el programa hace durante la ejecucion(lo poquito que dura XD ) :-p
 

Archivos adjuntos

  • TransportesFletes.rar
    20.9 KB · Visitas: 80
no se si lo hayas resuelto, pero mirando por encima el codigo veo que pones obj=new Vehiculo[5]; hasta aqui lo que haces es reservar cinco espacios en memoria en el arreglo. pero el contenido esta en null

por eso cuando haces dentro del for cuando haces obj.Vehiculo(); bota una excepcion de null pointer porque el contenido de la posicion "i" del arreglo es nula
lo que debes hacer es crear el contenido del arreglo primero antes de tratar de accedes a las posiciones.

tambien veo que hay metodos en los cuales indicas que tienen retorno pero falta el return String rutas_asignadas() y String vehiculos_asignados()
 
El gran problema con los que enseñan a programar (lo que mi humilde opinión es imposible) es que ponen a sus estudiantes a escribir código (en un lenguaje de por si arcano, como JAVA) sin antes explicarles las mas mínimas nociones sobre programación.

Lo que ocurre aquí es un error en tiempo de ejecución, el código en si no es lo que esta mal, sino lo que hace el código, el error solo se presenta al ejecutar, por suerte es un error que detecta el interprete de java (Un excepción) mucho peores son los errores semánticos, que no se notan hasta comprobar el resultado del programa... diferenciar esos tipos de errores y lograr dimensionar mentalmente el funcionamiento del programa (al menos a nivel unitario) es algo que debería poder hacer cualquier estudiante antes de escribir código; por lo que veo no es el caso.

Ahora bien, es buena idea pedir ayuda... el asunto es que esta claro que se trata de una Excepción generada cuando JAVA trata de acceder a un objeto que esta declarado pero no contiene nada (contiene null); para solucionar ese problema hay que evaluar que es lo que supone que hace el programa y ver si el código realmente describe esa funcionalidad.

Lo peor que podríamos hacer seria corregir el código o decir donde corregirlo; después de todo este no es un error por desconocimiento del lenguaje, sino una falla de lógica fundamental... y ya que la enseñanza de programación es tan mala la mejor opción que queda es aprender de la experiencia corrigiendo nuestros propios errores.

Un programador debe responder a 3 preguntas, en orden y de forma clara:

1. Qué debo hacer para solucionar el problema dado.
2. Por qué el procedimiento X es la mejor solución para el problema dado.
3. Cómo plasmo mi solución de una forma que la computadora lo entienda.

Solo en la tercer pregunta interviene la programación (Lenguaje, paradigma, herramientas) y si no se ha contestado y afianzado las respuestas de las otras dos sencillamente el programa no funcionara.

El programador no debe esperar que la maquina pueda hacer algo que el mismo no comprende!.
 
El gran problema con los que enseñan a programar (lo que mi humilde opinión es imposible) es que ponen a sus estudiantes a escribir código (en un lenguaje de por si arcano, como JAVA) sin antes explicarles las mas mínimas nociones sobre programación.

Lo que ocurre aquí es un error en tiempo de ejecución, el código en si no es lo que esta mal, sino lo que hace el código, el error solo se presenta al ejecutar, por suerte es un error que detecta el interprete de java (Un excepción) mucho peores son los errores semánticos, que no se notan hasta comprobar el resultado del programa... diferenciar esos tipos de errores y lograr dimensionar mentalmente el funcionamiento del programa (al menos a nivel unitario) es algo que debería poder hacer cualquier estudiante antes de escribir código; por lo que veo no es el caso.

Ahora bien, es buena idea pedir ayuda... el asunto es que esta claro que se trata de una Excepción generada cuando JAVA trata de acceder a un objeto que esta declarado pero no contiene nada (contiene null); para solucionar ese problema hay que evaluar que es lo que supone que hace el programa y ver si el código realmente describe esa funcionalidad.

Lo peor que podríamos hacer seria corregir el código o decir donde corregirlo; después de todo este no es un error por desconocimiento del lenguaje, sino una falla de lógica fundamental... y ya que la enseñanza de programación es tan mala la mejor opción que queda es aprender de la experiencia corrigiendo nuestros propios errores.

Un programador debe responder a 3 preguntas, en orden y de forma clara:

1. Qué debo hacer para solucionar el problema dado.
2. Por qué el procedimiento X es la mejor solución para el problema dado.
3. Cómo plasmo mi solución de una forma que la computadora lo entienda.

Solo en la tercer pregunta interviene la programación (Lenguaje, paradigma, herramientas) y si no se ha contestado y afianzado las respuestas de las otras dos sencillamente el programa no funcionara.

El programador no debe esperar que la maquina pueda hacer algo que el mismo no comprende!.

totalmente de acuerdo.. muy bien dicho.
 

Los últimos temas