Java - Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException:

 
Vista:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException:

Publicado por alex (1 intervención) el 26/05/2017 05:09:33
Me podrian ayudar por q me sale esta excepcion
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2
at prueba2.Examen3.main(Examen3.java:58)

Aqui esta mi codigo:

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
package prueba2;
import java.io.*;
public class Examen3 {
	public static void main(String args[])throws IOException{
		Teclado t=new Teclado();
		int porcentaje=0;
		String ruta=null,lectura=null;
		String Productos[]=new String[9];
		Productos[0]="Categoría,NumeroDeProductos,ImporteTotal,PrecioPromedio";
		int Cantidad[]=new int[8];
		double impTotal[]=new double[8];
		double PPromedio[]=new double[8];
		boolean existe=true;
		/*Hasta este punto, declaro los arreglos que necesito y las variables de clase que utilizaré */
		do{
			try{
				existe=false;
				System.out.println("Introduce la ruta del archivo a guardar(Si no agrega ruta,\nel programa guardará el archivo en la carpeta donde este esté)");
				ruta=t.leeString()+".csv";
				File f=new File(ruta);
				f.createNewFile();
				/*NOTA: No valido que un archivo nuevo ya exista, pues no lo pide el examen*/
			}
			catch(IOException e){/*Este catch es para comprobar una ruta valida para guardar el archivo a crear*/
				System.out.println("La ruta especificada no es válida. Intente con otra");
				existe=true;
			}
		}
		while(existe);
		System.out.println("Archivo creado: "+ruta);
		existe=true;
		do{
			try{
				System.out.println("Introduzca el porcentaje de incremeto de precios");
				existe=false;
				porcentaje=t.leeInt()/100;
			}
			catch(NumberFormatException e){
				existe=true;
				System.out.println("Debe introducir el porcentaje en cifras");
				/*Para evitar la introdiccion de numeros en letras e.g:("veinte")"*/
			}
			catch(ArithmeticException e){
				/*Este catch esta de mas °o°*/
				porcentaje=0;
			}
		}
		while(existe);
		BufferedReader bf=new BufferedReader(new FileReader("C:\\Users\\alex\\Desktop\\prueba2\\ListaDeProductos.csv"));
		/*No pide solicitar al usuario la ruta del programa porque el examen no lo pide*/
		int i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;/*Contadores para cada categoría de grupo de productos*/
		while((lectura=bf.readLine())!=null)/*Hace la lectura del archivo*/{
			String datos[]=lectura.split(",");
			switch(datos[2])/*Evalua el dato guardado en el arreglo datos[2]*/{
			case "Bebidas":
				Cantidad[0]=++i;/*El valor guardado en el arreglo de cantidad incremeta*/
				double PUnitario1=Double.parseDouble(datos[3]);/*Convierte de string a doble*/
				/*NOTA: Para cada caso declaro una variable PUnitario(1,2,3, etc)*/
				impTotal[0]=(PUnitario1+(PUnitario1*porcentaje))+impTotal[0];/*Se calcula el importe total sumando el dato guardado en el arreglo
				mas el nuevo dato guardado En PUnitario1 generando una nueva cantidad*/
				PPromedio[0]=impTotal[0]/Cantidad[0]/*Se calcula el promedio tomando en cuenta los valores nuevos de los arreglos Cantidad
				y de impTotal, y esta cantidad se guarda en el arreglo PPromedio*/;
				Productos[1]="Bebidas,"+Cantidad[0]+","+(impTotal[0])+","+PPromedio[0];/*Se concatenan los datos de los arreglos utilizados
				y estos se guardan en una arreglo de tipo String*/
				break;
/*NOTA: Los datos se actualizan cada que entra un dato de tipo Bebida (en este caso). Lo mismo pasa con los otros casos*/
			case"Carnes":
				Cantidad[1]=++j;
				double PUnitario2=Double.parseDouble(datos[3]);
				impTotal[1]=(PUnitario2+(PUnitario2*porcentaje))+impTotal[1];
				PPromedio[1]=impTotal[1]/Cantidad[1];
				Productos[2]="Carnes,"+Cantidad[1]+","+(impTotal[1])+","+PPromedio[1];
				break;
			case"Condimentos":
				Cantidad[2]=++k;
				double PUnitario3=Double.parseDouble(datos[3]);
				impTotal[2]=(PUnitario3+(PUnitario3*porcentaje))+impTotal[2];
				PPromedio[2]=impTotal[2]/Cantidad[2];
				Productos[3]="Condimentos,"+Cantidad[2]+","+(impTotal[2])+","+PPromedio[2];
				break;
			case"Frutas/Verduras":
				Cantidad[3]=++l;
				double PUnitario4=Double.parseDouble(datos[3]);
				impTotal[3]=(PUnitario4+(PUnitario4*porcentaje))+impTotal[3];
				PPromedio[3]=impTotal[3]/Cantidad[3];
				Productos[4]="Frutas/Verduras,"+Cantidad[3]+","+(impTotal[3])+","+PPromedio[3];
				break;
			case "Granos/Cereales":
				Cantidad[4]=++m;
				double PUnitario5=Double.parseDouble(datos[3]);
				impTotal[4]=(PUnitario5+(PUnitario5*porcentaje))+impTotal[4];
				PPromedio[4]=impTotal[4]/Cantidad[4];
				Productos[5]="Granos/Cereales,"+Cantidad[4]+","+(impTotal[4])+","+PPromedio[4];
				break;
			case"Lácteos":
				Cantidad[5]=++o;
				double PUnitario6=Double.parseDouble(datos[3]);
				impTotal[5]=(PUnitario6+(PUnitario6*porcentaje))+impTotal[5];
				PPromedio[5]=impTotal[5]/Cantidad[5];
				Productos[6]="Lácteos,"+Cantidad[5]+","+(impTotal[5])+","+PPromedio[5];
				break;
			case "Pescado/Marisco":
				Cantidad[6]=++p;
				double PUnitario7=Double.parseDouble(datos[3]);
				impTotal[6]=(PUnitario7+(PUnitario7*porcentaje))+impTotal[6];
				PPromedio[6]=impTotal[6]/Cantidad[6];
				Productos[7]="Pescado/Marisco,"+Cantidad[6]+","+(impTotal[6])+","+PPromedio[6];
				break;
			case"Repostería":
				Cantidad[7]=++n;
				double PUnitario8=Double.parseDouble(datos[3]);
				impTotal[7]=(PUnitario8+(PUnitario8*porcentaje))+impTotal[7];
				PPromedio[7]=impTotal[7]/Cantidad[7];
				Productos[8]="Repostería,"+Cantidad[7]+","+(impTotal[7])+","+PPromedio[7];
				break;
			}
		}
		FileWriter fw=new FileWriter(ruta);
		/*Se abre el flujo de datos entre el archivo y el programa*/
		PrintWriter pw=new PrintWriter(fw);
		/*Crea un objeto de tipo PintWriter para hacer la escritura en el archivo de texto*/
		for(int a=0;a<Productos.length;a++)/*Se efectua la impresion (De acuerdo a lo que haya guardado en cada lugar del arreglo)*/{
			pw.println(Productos[a]);
		}
		pw.close();/*Se cierra el flujo de datos*/
	}
 
}
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