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

Problema NullPointerException?

Estas en el tema de Problema NullPointerException? en el foro de Java en Foros del Web. Buenas Resulta que tengo parcial de Programación II dentro de unos días y estoy preparando un par de programas de guía. Y me he encontrado ...
  #1 (permalink)  
Antiguo 13/11/2012, 22:16
 
Fecha de Ingreso: noviembre-2012
Mensajes: 2
Antigüedad: 12 años
Puntos: 0
Problema NullPointerException?

Buenas
Resulta que tengo parcial de Programación II dentro de unos días y estoy preparando un par de programas de guía.
Y me he encontrado con el error del título que no me ha dejado continuar.

Código:
////Arturo Calle, ofrece a sus clientes diferentes modelos de vestidos, 
//entre los datos comunes a todos tiene modelo, precio, cantidad, talla 
//algunos vestidos cuentan con chaleco, otros con gabardina y algunos 
//otros con corbata. Los vestidos se pueden vender, adicionar (nuevos modelos), 
//y buscar alguno específico para determinar sus existencias.

package arturocalle2;
import java.util.*;

public class ArturoCalle2 {

static vestidoschal[]c=new vestidoschal[100];
static vestidosgab[]g=new vestidosgab[100];
static vestidoscorb[]co=new vestidoscorb[100];

static Scanner lee=new Scanner(System.in);
static int opc, x=0,y=0,w=0,z=0,a,salir;
static String modelo, talla;
static String gabardina, chaleco, corbata,tipo;
static double precio, cantidad,total=0,TOTAL=0;

static void chal()
{   
      c[x].getModelo();
       System.out.println("Ingresa el modelo ");
       modelo=lee.next();
       System.out.println("Ingresa precio");  
       precio=lee.nextDouble();
       System.out.println("Ingresa la cantidad");
       cantidad=lee.nextDouble();
       System.out.println("Ingresa la talla"); 
       talla=lee.next();
       System.out.println("Ingresa el color del chaleco");
       chaleco=lee.nextLine();
       x++;
       c[x].setModelo(modelo);
       c[x].setPrecio(precio);
       c[x].setCantidad(cantidad);
       c[x].setTalla(talla);
       c[x].setChaleco(chaleco);   
       c[x].setNum(x+1);
       
}
static void gab()
{
       System.out.println("Ingresa el modelo ");
       modelo=lee.next();
       System.out.println("Ingresa precio");  
       precio=lee.nextDouble();
       System.out.println("Ingresa la cantidad");
       cantidad=lee.nextDouble();
       System.out.println("Ingresa la talla"); 
       talla=lee.next();
       System.out.println("Ingresa el color de la gabardina");
       gabardina=lee.nextLine();
       
       g[y].setModelo(modelo);
       g[y].setCantidad(cantidad);
       g[y].setPrecio(precio);
       g[y].setTalla(talla);
       g[y].setGabardina(gabardina);
       g[y].setNum(y+1);
       y++;
}
static void corb()
{      System.out.println("Ingresa el modelo ");
       modelo=lee.next();
       System.out.println("Ingresa precio");  
       precio=lee.nextDouble();
       System.out.println("Ingresa la cantidad");
       cantidad=lee.nextDouble();
       System.out.println("Ingresa la talla"); 
       talla=lee.next();
       System.out.println("Ingresa el color de la gabardina");
       corbata=lee.nextLine();
       
       co[w].setModelo(modelo);
       co[w].setCantidad(cantidad);
       co[w].setPrecio(precio);
       co[w].setTalla(talla);
       co[w].setCorbata(corbata);
       co[w].setNum(w+1);
       w++;
       
    
}
public static void main(String[] args) 
        
    {
 
        do
        {
                    System.out.println("Elige una opción");
                    System.out.println("1. Ingresa un vestido con chaleco");
                    System.out.println("2. Ingresa un vestido con gabardina");
                    System.out.println("3. Ingresa un vestido con corbata");
                  
                    opc=lee.nextInt();
                    switch(opc)
                    {
                        case 1:
                            chal();
                            break;
                        case 2:
                            gab();
                            break;
                        case 3:
                            corb();
                            break;
                    }
        }
        while(opc!=4);
    }
}
Ahora la clase
Código:
package arturocalle2;


public class madre {

    private String modelo;
    private double precio;
    private double cantidad;
    private String talla;
    public int num;
    madre() {} ;



      public int getNum() {
        return num;
    }

    public void setNum(int num) {
        this.num = num;
    }
   
    public String getModelo() {
        return modelo;
    }

    public void setModelo(String modelo) {
        this.modelo = modelo;
    }

    public double getPrecio() {
        return precio;
    }

    public void setPrecio(double precio) {
        this.precio = precio;
    }

    public double getCantidad() {
        return cantidad;
    }

    public void setCantidad(double cantidad) {
        this.cantidad = cantidad;
    }

    public String getTalla() {
        return talla;
    }

    public void setTalla(String talla) {
        this.talla = talla;
    }

}
    class vestidoschal extends madre {

        String chaleco;

        public String getChaleco() {
            return chaleco;
        }

        public void setChaleco(String chaleco) {
            this.chaleco = chaleco;
        }
    }
    
    class vestidosgab extends madre
    {
        private String gabardina;

        public String getGabardina() {
            return gabardina;
        }

        public void setGabardina(String gabardina) {
            this.gabardina = gabardina;
        }
    }
    class vestidoscorb extends madre
    {
        String corbata;

        public String getCorbata() {
            return corbata;
        }

        public void setCorbata(String corbata) {
            this.corbata = corbata;
        }
        
    }
Me faltan varias funciones que pide el problema, pero si no me sirve esta parte, mucho menos las demás.
Si alguien conoce la causa del error, estaría agradecido si pudiera darme algo de ayuda.

Última edición por Bender_R; 13/11/2012 a las 22:27
  #2 (permalink)  
Antiguo 14/11/2012, 01:54
Avatar de Heimish2000  
Fecha de Ingreso: enero-2011
Ubicación: Madrid
Mensajes: 844
Antigüedad: 13 años, 10 meses
Puntos: 89
Respuesta: Problema NullPointerException?

¿Has depurado? ¿Dónde te da el error exactamente?
  #3 (permalink)  
Antiguo 14/11/2012, 02:29
 
Fecha de Ingreso: enero-2009
Mensajes: 26
Antigüedad: 15 años, 10 meses
Puntos: 4
Respuesta: Problema NullPointerException?

Buenas,

El problema lo tienes aquí:

static vestidoschal[]c=new vestidoschal[100];
static vestidosgab[]g=new vestidosgab[100];
static vestidoscorb[]co=new vestidoscorb[100];


Cuando declaras un array de "x" elementos de una clase, ninguno de ellos destá inicializado por defecto (excepto en el caso de las clases primitivas, como la clase int, que si lo están).

Por tanto cuando intentas hacer algo como...

co[w].setModelo(modelo); ... obtienes un NullPointerException porque el objeto "co[w]", sea cual sea el valor de w, es nulo.

Cambia ...

co[w].setModelo(modelo);

Por...

co[w] = new vestidoscorb(); // Aquí inicializas la clase y evitas el error.
co[w].setModelo(modelo);

Tienes que hacer esto para los demás "modelos".

De todas formas, como indica Heimish2000, en la descripción del error debería mostrarte la línea y la clase que están dando el problema.

Off Topic: Evita utilizar static hasta que comprendas bien sus efectos secundarios (que tiene... y muchos :)
  #4 (permalink)  
Antiguo 14/11/2012, 11:52
 
Fecha de Ingreso: noviembre-2012
Mensajes: 2
Antigüedad: 12 años
Puntos: 0
Respuesta: Problema NullPointerException?

Cita:
Iniciado por v3rn0n Ver Mensaje
Buenas,

El problema lo tienes aquí:

static vestidoschal[]c=new vestidoschal[100];
static vestidosgab[]g=new vestidosgab[100];
static vestidoscorb[]co=new vestidoscorb[100];


Cuando declaras un array de "x" elementos de una clase, ninguno de ellos destá inicializado por defecto (excepto en el caso de las clases primitivas, como la clase int, que si lo están).

Por tanto cuando intentas hacer algo como...

co[w].setModelo(modelo); ... obtienes un NullPointerException porque el objeto "co[w]", sea cual sea el valor de w, es nulo.

Cambia ...

co[w].setModelo(modelo);

Por...

co[w] = new vestidoscorb(); // Aquí inicializas la clase y evitas el error.
co[w].setModelo(modelo);

Tienes que hacer esto para los demás "modelos".

De todas formas, como indica Heimish2000, en la descripción del error debería mostrarte la línea y la clase que están dando el problema.

Off Topic: Evita utilizar static hasta que comprendas bien sus efectos secundarios (que tiene... y muchos :)

Muchísimas gracias. Efectivamente, ese era el problema.

Etiquetas: clase, programa, 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 13:53.