Java - Problema con metodo

 
Vista:
Imágen de perfil de jose
Val: 59
Ha disminuido su posición en 3 puestos en Java (en relación al último mes)
Gráfica de Java

Problema con metodo

Publicado por jose (35 intervenciones) el 04/11/2018 08:07:40
Buenos días,

Tengo un problema con un programa donde me sale un error java.lang.NullPointerException.
at eac5P2.EAC5P2_001.afegirAlCarro(EAC5P2_001.java:134)
at eac5P2.EAC5P2_001.inici(EAC5P2_001.java:49)
at eac5P2.EAC5P2_001.main(EAC5P2_001.java:20)

Estoy debugeando y veo que hace todo los pasos. Pero acaba dando error.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
private void afegirAlCarro(String[][] productes, String[][] carroCompra) {
    scanner = new Scanner(System.in);
    String codiProducto = null;
    String descripcion = null;
    String PVP = null;
    int PvpInt = 0;
    int cantidad = 0;
 
    // Preguntar por el código del producto
    System.out.print("\nIntrodueix el codi del producte que desea comprar: ");
    codiProducto = scanner.nextLine();
 
    //Comprobamos que existe el producto, si existe continua
    if (dades.cercaCodiProducte(codiProducto, productes) == true) {
 
        dades.cercaDescripcioProducte(codiProducto, productes);
        dades.cercaPreuProducte(codiProducto, productes);
 
 
                // Codi productes, Descripció , PVP
        for (int i = 0; (i < productes.length); i++) {
            if (productes[i][0].equalsIgnoreCase(codiProducto)) {
                System.out.print("\n__________________________________\n"
                        + "\tDATOS DEL PRODUCTO\n"
                        + "__________________________________\n"
                        + "codigo: " + productes[i][0] + "\t"
                        + "\tdescripción: " + productes[i][1] + "\t"
                        + "\tPVP: " + productes[i][2] + "\n");
 
 
                //Preguntar por cantidad del producto
                System.out.print("\nIntrodueix la cantidad de producte que desea comprar: ");
                cantidad = scanner.nextInt();
 
                //Pasamos PVP de int a String para utilizarlo con el método afegirAlCarro
                PvpInt = Integer.parseInt(productes[i][2]);
                descripcion = productes[i][1];
                dades.afegirAlCarro(codiProducto, descripcion, PvpInt,cantidad,carroCompra);
 
            }
        }
    }else{
        System.out.print("_______________________\n"+
                "El producto no existe\n" +
                "_______________________\n");
    }
}


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public void afegirAlCarro(String pCodiProducte, String pDescripcio, int pPvp, int pQuantitat, String[][] carroCompra) {
    // S’afegiran les dades Codi Producte, Descripció, PVP i Quantitat en l’array 		// “carroCompra”
    //Realizamos calculo del valor total del producto por cantidad
    int SubTotal = (pPvp * pQuantitat);
    //Pasamos Cantidades de int a String para añadirlo al array
    String StPVP = Integer.toString(pPvp);
    String StQuantitat = Integer.toString(pQuantitat);
    String StSubTotal = Integer.toString(SubTotal);
 
    for (int i = 0; i < carroCompra.length; i++) {
        if (carroCompra[i][0] == null) {
            carroCompra[i][0] = pCodiProducte;
            carroCompra[i][1] = pDescripcio;
            carroCompra[i][2] = StPVP;
            carroCompra[i][3] = StQuantitat;
            carroCompra[i][4] = StSubTotal;
            break;
        }
    }
    //Para comprobar
    System.out.println("\nSe ha añadido al carro de la compra\n"+
            "Codigo: " + pCodiProducte + " -- descripcion: " + pDescripcio +
            " -- pvp:" + StPVP + " -- cantidad: " + StQuantitat + " -- Subtotal de " + StSubTotal);
 
}

El error que tengo es:

Selection_024
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Problema con metodo

Publicado por Rakan (43 intervenciones) el 04/11/2018 12:22:19
Cuál es la línea 134 de tu programa?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Billy Joel
Val: 2.059
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Problema con metodo

Publicado por Billy Joel (563 intervenciones) el 04/11/2018 14:37:14
Me gustaría poder ayudar, será posible pases el código completo o el proyecto a verlo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de jose
Val: 59
Ha disminuido su posición en 3 puestos en Java (en relación al último mes)
Gráfica de Java

Problema con metodo

Publicado por jose (35 intervenciones) el 04/11/2018 15:40:38
Billy Joel,

Si te paso el código completo en archivos.

Muchas gracias,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de jose
Val: 59
Ha disminuido su posición en 3 puestos en Java (en relación al último mes)
Gráfica de Java

Problema con metodo

Publicado por jose (35 intervenciones) el 04/11/2018 16:09:15
Hola Billy Joel,

He dado con el problema, aunque para mi. una cosa y otra significa lo mismo.

En la línea 134 he cambiado
1
if (productes[i][0]).equalsIgnoreCase(codiProducto) {

por
1
if (codiProducto.equalsIgnoreCase(productes[i][0])) {

y ahora funciona bien. No entiendo muy bien, por que falla, cuando pasa dos veces antes de comprobar, la primera funciona bien, y la segunda da el fallo.

Si ves algún para mejorar el código, soy todo oídos. La cuestión es mejorar.

Muchas gracias por la ayuda,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problema con metodo

Publicado por Tom (1569 intervenciones) el 04/11/2018 17:10:56
Está claro que productes[i][0] en algun valor de i es null.
Tu línea original trata de usar el método equalsIgnoreCase de un objeto null, de ahí la excepción.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Billy Joel
Val: 2.059
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Problema con metodo

Publicado por Billy Joel (563 intervenciones) el 04/11/2018 18:57:14
Este comentario lo pondre en haciendo referencia a mi post anterior
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Billy Joel
Val: 2.059
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Problema con metodo

Publicado por Billy Joel (563 intervenciones) el 04/11/2018 18:52:58
He probado todo el código y te explico las correcciones

En esta línea se estaba recorriendo todo el arreglo productes y por esto que daba un NullPointerException
1
if (productes[i][0].equalsIgnoreCase(codiProducto)) {

La solución estaba en el método afegirAlCarro en donde validabas si el valor era o no nulo, entonces lo que hice fue verificar primero si el valor era nulo o no, también agregé un break; al final.

Este error se daba porque no se tenía completo arreglo del catálogo.

En el método comprobarPVP de la clase dadesAplicacio también hice cambios.
Entiendo que se recorre el String caracter por caracter para validar si es una letra

Bueno al final con las correcciones lo dejo así:
Clase: dadesAplicacio
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
import java.util.Scanner;
 
/**
 * En aquesta classe es gestionaran les dades que es guarden en els arrays, per
 * exemple consultar i afegir dades en els arrays
 *
 * @author joserodriguezan
 *
 */
public class dadesAplicacio {
 
    public boolean cercaCodiProducte(String pCodiProducte, String[][] productes) {
 
        for (int i = 0; (i < productes.length); i++) {
            if (pCodiProducte.equalsIgnoreCase(productes[i][0])) {
                return true;
            }
        }
        //Si el for no ha retornado true, es que no existe el codigo, asi que retornamos false
        return false;
 
    }
 
//    public String comprobarPVP(String PVP) {
//        for (int i = 0; i < PVP.length(); i++) {
//            Scanner scanner = new Scanner(System.in);
//            //Contamos letras y añadimos a la variable del contador de las letras
//            if (Character.isLetter(PVP.charAt(i))) {
//                System.out.print("\nHa de ser números\n" + "_______________");
//                System.out.print("\nIntrodueix el PVP del producte (Sólament numeros enteros): ");
//                PVP = scanner.nextLine();
//                return PVP;
//            }
//
//        }
//        return "";
//    }
 
    public String comprobarPVP(String PVP) {
        Scanner scanner = new Scanner(System.in);
        char [] char_array = PVP.toCharArray();
        for(char c : char_array){
            if(Character.isLetter(c)){
                System.out.print("\nHa de ser números\n" + "_______________");
                System.out.print("\nIntrodueix el PVP del producte (Solament numeros enteros): ");
                PVP = scanner.nextLine();
                comprobarPVP(PVP);
            }
        }
        return PVP;
    }
 
    public String cercaDescripcioProducte(String pCodiProducte, String[][] productes) {
        // A partir del Codi del producte es tornarà la Descripció del producte,
        // en cas que el producte no existeixi es retornarà: return “”;
 
        for (int i = 0; (i < productes.length); i++) {
            if (pCodiProducte.equalsIgnoreCase(productes[i][0])) {
                //Retorna la descripción del producto
                return productes[i][1];
            }
        }
 
        return ""; //Si no existe retorna nulo
    }
 
    public int cercaPreuProducte(String pCodiProducte, String[][] productes) {
        // A partir del Codi del producte es tornarà el PVP del producte,
        // en cas que el producte no existeixi es retornarà: return 0;
 
        for (int i = 0; (i < productes.length); i++) {
            if (pCodiProducte.equalsIgnoreCase(productes[i][0])) {
                //Convertimos de Int a String para que retorne un Integer
                int StPVP = Integer.parseInt(productes[i][2]);
                return StPVP; //retorna PVP
            }
        }
 
        return 0; //si no se encuentra que no retorne nada.
    }
 
    public void afegirProducte(String pCodiProducte, String pDescripcio, int pPvp, String[][] productes) {
        // S’afegiran les dades Codi Producte, Descripció i PVP en l’array “productes”
        String StPVP = null;
        //insertado:
        for (int i = 0; i < productes.length; i++) {
            if (productes[i][0] == null) {
                //Se realiza la conversión de del precio de String a Integer
                StPVP = String.valueOf(pPvp);
                //Añadimos los productos al carro
                productes[i][0] = pCodiProducte;
                productes[i][1] = pDescripcio;
                productes[i][2] = StPVP;
                break;
            }
        }
        //Para comprobar
        System.out.println("\nSe ha añadido a la lista de productos\n"
                + "Codigo: " + pCodiProducte + " -- Descripcion: " + pDescripcio
                + " -- Pvp:" + StPVP);
 
    }
 
    public void afegirAlCarro(String pCodiProducte, String pDescripcio, int pPvp, int pQuantitat, String[][] carroCompra) {
        // S’afegiran les dades Codi Producte, Descripció, PVP i Quantitat en l’array 		// “carroCompra”
        //Realizamos calculo del valor total del producto por cantidad
        int SubTotal = (pPvp * pQuantitat);
        //Pasamos Cantidades de int a String para añadirlo al array
        String StPVP = Integer.toString(pPvp);
        String StQuantitat = Integer.toString(pQuantitat);
        String StSubTotal = Integer.toString(SubTotal);
 
        for (int i = 0; i < carroCompra.length; i++) {
            if (carroCompra[i][0] == null) {
                carroCompra[i][0] = pCodiProducte;
                carroCompra[i][1] = pDescripcio;
                carroCompra[i][2] = StPVP;
                carroCompra[i][3] = StQuantitat;
                carroCompra[i][4] = StSubTotal;
                break;
            }
        }
        //Para comprobar
        System.out.println("\nSe ha añadido al carro de la compra\n"
                + "Codigo: " + pCodiProducte + " -- descripcion: " + pDescripcio
                + " -- pvp:" + StPVP + " -- cantidad: " + StQuantitat + " -- Subtotal de " + StSubTotal);
    }
}

Clase: EAC5P2_001
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
/**
 * Aquesta serà la classe principal del programa, és a dir on tindrem els
 * mètodes main i inici així com el menú d’opcions del programa
 *
 * @author José Luis Rodríguez Andrádez
 *
 */
import java.util.Scanner;
 
public class EAC5P2_001 {
 
    private static final int MAX = 10;
    Scanner scanner = new Scanner(System.in);
    dadesAplicacio dades = new dadesAplicacio();
 
    public static void main(String[] args) {
        EAC5P2_001 programa = new EAC5P2_001();
        programa.inici();
    }
 
    private void inici() {
        // Codi productes, Descripció , PVP
        String[][] productes = new String[MAX][3];
        //Codi producte,Descripció, PVP, Quantitat
        String[][] carroCompra = new String[MAX][5];
 
        boolean sortir = false;
        int opcio;
 
        mostrarPresentacio();
 
        while (!sortir) {
            System.out.println();
            System.out.println("1. Afegir producte al catáleg");
            System.out.println("2. Afegir producte al carro de la compra");
            System.out.println("3. Llista de productes");
            System.out.println("4. Mostrar productes del carro de la compra");
            System.out.println("5. Sortir");
            System.out.println("Escriu el número de l'opció:");
            opcio = scanner.nextInt();
 
            switch (opcio) {
                case 1:
                    afegirProductes(productes);
                    break;
                case 2:
                    afegirAlCarro(productes, carroCompra);
                    break;
                case 3:
                    mostrarLlistaProductes(productes);
                    break;
                case 4:
                    mostrarCarroCompra(carroCompra);
                    break;
                case 5:
                    fiPrograma();
                    sortir = true;
                    break;
                default:
                    System.out.println("Nomas números entre 1 i 5");
            }
        }
    }
 
    private void afegirProductes(String[][] productes) {
        // Es demanaran les dades Codi Producte, descripció i PVP,
        // es comprovarà si aquest producte ja existeix en l’array «productes»
        // i si no hi és, doncs s’afegirà en l’array, de la forma següent:
        // dades.afegirProducte(codiProducte, descripcio, pvp, productes);
        scanner = new Scanner(System.in);
        String codiProducto;
        String descripcion;
        String PVP;
 
        System.out.print("\nIntrodueix el codi del producte: ");
        codiProducto = scanner.nextLine();
 
        //Comprobar que no existe el producto
        if (dades.cercaCodiProducte(codiProducto, productes) == false) {
 
            System.out.print("\nIntrodueix la descripció del producte: ");
            descripcion = scanner.nextLine();
 
            System.out.print("\nIntrodueix el PVP del producte: ");
            PVP = scanner.nextLine();
            //Comprobamos que se insertan valores númericos
            PVP = dades.comprobarPVP(PVP);
 
            int PvpInt = Integer.parseInt(PVP);
            dades.afegirProducte(codiProducto, descripcion, PvpInt, productes);
        } else {
            System.out.print("_________________________________\n"
                    + "El producto existe en el catalogo\n"
                    + "_________________________________\n");
        }
 
    }
 
    private void afegirAlCarro(String[][] productes, String[][] carroCompra) {
        scanner = new Scanner(System.in);
        String codiProducto = null;
        String descripcion = null;
        String PVP = null;
        int PvpInt = 0;
        int cantidad = 0;
 
        // Es demanara el codi del producte que es vol comprar, *
        // es comprovarà si existeix en l’array de «productes», *
        // en cas afirmatiu mostrarà la descripció del producte i el PVP, *
        // llavors demanarà la quantitat o unitats que es volen comprar *
        // i s’afegirà a l’array «carroCompra» les dades  *
        // Codi Producte, descripció, PVP i Quantitat de la forma següent:
        // dades.afegirAlCarro(codiProducte, descripcio, pvp, quantitat, carroCompra);
        //Comprobar que no existe el producto
        // Es demanara el codi del producte que es vol comprar,
        System.out.print("\nIntrodueix el codi del producte que desea comprar: ");
        codiProducto = scanner.nextLine();
 
        //Comprobamos que existe el producto, si existe continua
        if (dades.cercaCodiProducte(codiProducto, productes) == true) {
            /*for (int i = 0; (i < productes.length); i++) {
	        if (productes[i][0] != null) {
	        	if (productes[i][0].equals(codiProducto)) {*/
            // es comprovarà si existeix en l’array de «productes»,
            // en cas afirmatiu mostrarà la descripció del producte i el PVP,
 
            dades.cercaDescripcioProducte(codiProducto, productes);
            dades.cercaPreuProducte(codiProducto, productes);
            // Codi productes, Descripció , PVP
            for (int i = 0; i < productes.length; i++) {
                if (productes[i][0] != null) {
                    if (productes[i][0].equalsIgnoreCase(codiProducto)) {
                        System.out.print("\n__________________________________\n"
                                + "\tDATOS DEL PRODUCTO\n"
                                + "__________________________________\n"
                                + "codigo: " + productes[i][0] + "\t"
                                + "\tdescripción: " + productes[i][1] + "\t"
                                + "\tPVP: " + productes[i][2] + "\n");
 
                        // llavors demanarà la quantitat o unitats que es volen comprar
                        System.out.print("\nIntrodueix la cantidad de producte que desea comprar: ");
                        cantidad = scanner.nextInt();
 
                        //Pasamos PVP de int a String para utilizarlo con el método afegirAlCarro
                        PvpInt = Integer.parseInt(productes[i][2]);
                        descripcion = productes[i][1];
                        dades.afegirAlCarro(codiProducto, descripcion, PvpInt, cantidad, carroCompra);
                        break;
                    }
                }
 
            }
 
        } else {
            System.out.print("_______________________\n"
                    + "El producto no existe\n"
                    + "_______________________\n");
        }
 
    }
 
    private void mostrarLlistaProductes(String[][] productes) {
        // Es mostren les dades de tots els productes de l’array «productes»
 
        //Comprueba que no hay nada en la lista
        if (productes[0][0] == null) {
            System.out.println("No hay ningún producto en la lista");
        } else {
            System.out.println("\nLa lista completa de productos son los siguientes"
                    + "\n________________________________________________");
            //Si hay algo en la lista nos imprime los productos.
            for (int i = 0; i < productes.length; i++) {
                if (productes[i][0] != null) {
                    System.out.println("Código: " + productes[i][0] + "\tDescripción: " + productes[i][1] + "\tPVP: " + productes[i][2]);
                }
            }
        }
    }
 
    private void mostrarCarroCompra(String[][] carroCompra) {
        // Es mostren les dades de l’array «carroCompra» amb les dades
        // Codi Producte, descripció, PVP,  Quantitat i Import (PVP * Quantitat).
        // Un cop mostrades totes les dades del carro de la compra, 
        // es mostrarà l’import total del carro de la compra, 
        // és a dir la suma dels imports de totes les línies de la comanda, 
        // tenint en compte que per cada línia l’import és PVP * Quantitat.
        int suma = 0;
        int total = 0;
 
        //Comprueba que no hay nada en la lista
        for (int x = 0; x < carroCompra.length; x++) {
            if (carroCompra[0][0] == null) {
                System.out.println("No hay ningún producto en la lista");
            } else {
                System.out.println("La lista completa del carro de la compra son los siguientes"
                        + "\n_____________________________________________________________");
                for (int y = 0; y < carroCompra.length; y++) {
                    if (carroCompra[y][0] != null) {
                        System.out.println("Codigo: " + carroCompra[y][0]
                                + "\t\t Descripción: " + carroCompra[y][1]
                                + "\t PVP: " + carroCompra[y][2]
                                + "\t Cantidad: " + carroCompra[y][3]
                                + "\t\t Total:" + carroCompra[y][4]);
                        suma = Integer.parseInt(carroCompra[y][4]);
                        total += suma;
                    }
                }
 
                System.out.println("Importe Total: " + total);
                return;
            }
        }
 
    }
 
    //Método que presenta información del programa.
    private void mostrarPresentacio() {
        System.out.println("Programa para gestionar productor y carro de la compra");
    }
 
    //Método que soluciona el subproblema de finalizar el programa.
    private void fiPrograma() {
        System.out.println("Finalizar programa");
    }
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Billy Joel
Val: 2.059
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Problema con metodo

Publicado por Billy Joel (563 intervenciones) el 04/11/2018 19:12:38
Después de ver el objetivo del programa, lo he hecho de nuevo pero en versión de Español de Panamá ;-)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.ListIterator;
import java.util.Map;
 
/**
 *
 * @author billy.johnson
 */
public class Carrito {
 
    private final Map<String, Producto> productos;
    private final List<Producto> carrito;
    private final BufferedReader br;
 
    public static final int OPCION_AGREGAR_PRODUCTOS_AL_CATALOGO = 1;
    public static final int OPCION_LISTAR_PRODUCTOS_DEL_CATALOGO = 2;
    public static final int OPCION_AGREGAR_PRODUCTOS_AL_CARRITO = 3;
    public static final int OPCION_LISTAR_PRODUCTOS_DEL_CARRITO = 4;
    public static final int OPCION_SALIR = 0;
 
    public Carrito() {
        productos = new HashMap();
        carrito = new ArrayList();
        br = new BufferedReader(new InputStreamReader(System.in));
    }
 
    public String leer() {
        String s = "";
        try {
            s = br.readLine();
        } catch (IOException ex) {
            ex.printStackTrace(System.out);
        }
        return s;
    }
 
    public Integer leerInt() {
        Integer i = -1;
        boolean error;
        do {
            try {
                i = Integer.parseInt(leer());
                error = false;
            } catch (NumberFormatException ex) {
                System.out.println("Introduzca solo numeros enteros");
                error = true;
            }
        } while (error);
        return i;
    }
 
    public Double leerDouble() {
        Double d = 0.00;
        boolean error;
        do {
            try {
                d = Double.parseDouble(leer());
                error = false;
            } catch (NumberFormatException ex) {
                System.out.println("Introduzca solo numeros");
                error = true;
            }
        } while (error);
        return d;
    }
 
    /**
     * Metodo utilizado para agregar productos al catalogo
     */
    public void agregarProductosAlCatalogo() {
        String codigo;
        do {
            System.out.println("Introduzca el nuevo codigo del producto");
            codigo = leer();
            if(isExistCodigo(codigo)){
                System.out.println("El codigo que ingresastes ya existe\n");
            }
        } while (isExistCodigo(codigo));
        System.out.println("Introduzca la descripcion del producto");
        String descripcion = leer();
        System.out.println("Introduzca el precio del producto");
        double precio = leerDouble();
        Producto p = new Producto();
        p.setCodigo(codigo);
        p.setDescripcion(descripcion);
        p.setPrecio(precio);
        productos.put(codigo, p);
    }
 
    /**
     * Metodo utilizado para listar los productos del catalogo
     */
    public void listarCatalogo() {
        productos.keySet().forEach((codigo) -> {
            System.out.println("codigo: " + codigo);
            System.out.println("descripcion: " + productos.get(codigo).getDescripcion());
            System.out.println("precio: " + productos.get(codigo).getPrecio() + "\n\n");
        });
    }
 
    /**
     * Metodo utilizado para agregar productos al carrito
     */
    public void agregarProductoAlCarrito() {
        System.out.println("Introduzca el codigo del producto que desea agregar al carrito: ");
        String codigo = leer();
        if (isExistCodigo(codigo)) {
            int cantidad = leerInt();
            productos.get(codigo).setCantidad(cantidad);
            carrito.add(productos.get(codigo));
            System.out.println("El producto " + codigo + " " + productos.get(codigo).getDescripcion() + " ha sido agregado al carrito");
        } else {
            System.out.println("El codigo de producto que ingresaste no existe");
        }
    }
 
    public void listarCarrito() {
        if (carrito.isEmpty()) {
            System.out.println("No hay productos en el carrito");
        } else {
            double total = 0.0;
            ListIterator<Producto> i = carrito.listIterator();
            while (i.hasNext()) {
                Producto producto = i.next();
                System.out.println("codigo: " + producto.getCodigo());
                System.out.println("descripcion: " + producto.getDescripcion());
                System.out.println("precio: " + producto.getPrecio());
                System.out.println("cantidad: " + producto.getCantidad());
                System.out.println("subtotal: " + (producto.getCantidad() * producto.getPrecio()) + "\n");
                total += producto.getPrecio() * producto.getCantidad();
            }
            System.out.println("Total: " + total);
        }
    }
 
    private boolean isExistCodigo(String codigo) {
        return productos.containsKey(codigo);
    }
 
    public static void main(String[] args) {
        Carrito c = new Carrito();
        int opcion = -1;
        while (opcion != OPCION_SALIR) {
            System.out.println("Introduzca " + OPCION_AGREGAR_PRODUCTOS_AL_CATALOGO + " para agregar productos al catalogo");
            System.out.println("Introduzca " + OPCION_LISTAR_PRODUCTOS_DEL_CATALOGO + " para listar el catalogo");
            System.out.println("Introduzca " + OPCION_AGREGAR_PRODUCTOS_AL_CARRITO + " para agregar productos al carrito");
            System.out.println("Introduzca " + OPCION_LISTAR_PRODUCTOS_DEL_CARRITO + " para listar el carrito");
            System.out.println("Introduzca " + OPCION_SALIR + " para salir");
            opcion = c.leerInt();
            switch (opcion) {
                case OPCION_AGREGAR_PRODUCTOS_AL_CATALOGO:
                    c.agregarProductosAlCatalogo();
                    break;
                case OPCION_LISTAR_PRODUCTOS_DEL_CATALOGO:
                    c.listarCatalogo();
                    break;
                case OPCION_AGREGAR_PRODUCTOS_AL_CARRITO:
                    c.agregarProductoAlCarrito();
                    break;
                case OPCION_LISTAR_PRODUCTOS_DEL_CARRITO:
                    c.listarCarrito();
                    break;
                case OPCION_SALIR:
                    System.out.println("Adios!!");
                    break;
                default:
                    System.out.println("opcion incorrecta");
                    break;
            }
        }
    }
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Billy Joel
Val: 2.059
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Problema con metodo

Publicado por Billy Joel (563 intervenciones) el 04/11/2018 21:13:43
Venía en el camino y se me olvidó subir la clase Producto; ésta clase es un bean que se utiliza para representar un producto en el programa
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
public class Producto {
    private String codigo;
    private String descripcion;
    private Double precio;
    private Integer cantidad;
 
    /**
     * @return the codigo
     */
    public String getCodigo() {
        return codigo;
    }
 
    /**
     * @param codigo the codigo to set
     */
    public void setCodigo(String codigo) {
        this.codigo = codigo;
    }
 
    /**
     * @return the descripcion
     */
    public String getDescripcion() {
        return descripcion;
    }
 
    /**
     * @param descripcion the descripcion to set
     */
    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
    }
 
    /**
     * @return the precio
     */
    public Double getPrecio() {
        return precio;
    }
 
    /**
     * @param precio the precio to set
     */
    public void setPrecio(Double precio) {
        this.precio = precio;
    }
 
    /**
     * @return the cantidad
     */
    public Integer getCantidad() {
        return cantidad;
    }
 
    /**
     * @param cantidad the cantidad to set
     */
    public void setCantidad(Integer cantidad) {
        this.cantidad = cantidad;
    }
 
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de jose
Val: 59
Ha disminuido su posición en 3 puestos en Java (en relación al último mes)
Gráfica de Java

Problema con metodo

Publicado por jose (35 intervenciones) el 05/11/2018 10:14:49
Hola Billy Joel,

Muchas gracias por la respuesta. El problema que hay es que me he de ceñir a un enunciado y a un código. No puedo crear más que aquello que sea esencial, sin modificar nada.

Por ponerte un ejemplo, me quitaron 0,4 puntos por renombrar un método. Si les presento esto les deberé los puntos del bollicao.

Muchas gracias por el esfuerzo así también aprendo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar