Java - No funciona mi for y hace el código infinitas veces

 
Vista:

No funciona mi for y hace el código infinitas veces

Publicado por kt (2 intervenciones) el 29/05/2022 16:42:46
package documentos;

import java.util.Scanner;

public class tercero {

public static void main(String[] args) {
// TODO Auto-generated method stub

Scanner entrada = new Scanner(System.in);

String[] empresa = new String[5];
String[] material = new String[3];
int toneladas = 0;
int toneladas1 = 0;
int toneladas2 = 0;
int toneladas3 = 0;
int toneladas4 = 0;
int i = 0;
double valor[] = new double[3];

for (i = 0; i < 5; i++) {

System.out.println("Digite la letra de su empresa a,b,c" + ",d ó e EN MINÚSCULAS");
empresa[i] = entrada.next();

switch (empresa[i]) {
case "a":
System.out.println("Digite la cantidad de toneladas producidas");
toneladas = entrada.nextInt();

for (i = 0; i < 3; i++) {

System.out.println(
"Escriba el tipo de material: papel, vidrio ó " + "plastico EN MINÚSCULAS Y SIN TÍLDES");
material[i] = entrada.next();

if (material[i].equals("vidrio")) {
valor[i] = (95 * toneladas) / 100;
System.out.println("La empresa recicla " + valor[i] + " toneladas de vidrio");
} else if (material[i].equals("plastico")) {
valor[i] = (10 * toneladas) / 100;
System.out.println("La empresa recicla " + valor[i] + " toneladas de plástico");
} else if (material[i].equals("papel")) {
valor[i] = (80 * toneladas) / 100;
System.out.println("La empresa recicla " + valor[i] + " toneladas de papel");
} else {
valor[i] = 0;
System.out.println("No Aplica");
}
}
break;

case "b":
System.out.println("Digite la cantidad de toneladas producidas");
toneladas1 = entrada.nextInt();

for (i = 0; i < 3; i++) {

System.out.println(
"Escriba el tipo de material: papel, vidrio ó " + "plastico EN MINÚSCULAS Y SIN TÍLDES");
material[i] = entrada.next();

if (material[i].equals("vidrio")) {
valor[i] = (95 * toneladas1) / 100;
System.out.println("La empresa recicla " + valor[i] + " toneladas de vidrio");
} else if (material[i].equals("plastico")) {
valor[i] = (10 * toneladas1) / 100;
System.out.println("La empresa recicla " + valor[i] + " toneladas de plástico");
} else if (material[i].equals("papel")) {
valor[i] = (80 * toneladas1) / 100;
System.out.println("La empresa recicla " + valor[i] + " toneladas de papel");
} else {
valor[i] = 0;
System.out.println("No Aplica");
}
}
break;

case "c":
System.out.println("Digite la cantidad de toneladas producidas");
toneladas2 = entrada.nextInt();

for (i = 0; i < 3; i++) {

System.out.println(
"Escriba el tipo de material: papel, vidrio ó " + "plastico EN MINÚSCULAS Y SIN TÍLDES");
material[i] = entrada.next();

if (material[i].equals("vidrio")) {
valor[i] = (95 * toneladas2) / 100;
System.out.println("La empresa recicla " + valor[i] + " toneladas de vidrio");
} else if (material[i].equals("plastico")) {
valor[i] = (10 * toneladas2) / 100;
System.out.println("La empresa recicla " + valor[i] + " toneladas de plástico");
} else if (material[i].equals("papel")) {
valor[i] = (80 * toneladas2) / 100;
System.out.println("La empresa recicla " + valor[i] + " toneladas de papel");
} else {
valor[i] = 0;
System.out.println("No Aplica");
}
}
break;

case "d":
System.out.println("Digite la cantidad de toneladas producidas");
toneladas3 = entrada.nextInt();

for (i = 0; i < 3; i++) {

System.out.println(
"Escriba el tipo de material: papel, vidrio ó " + "plastico EN MINÚSCULAS Y SIN TÍLDES");
material[i] = entrada.next();

if (material[i].equals("vidrio")) {
valor[i] = (95 * toneladas3) / 100;
System.out.println("La empresa recicla " + valor[i] + " toneladas de vidrio");
} else if (material[i].equals("plastico")) {
valor[i] = (10 * toneladas3) / 100;
System.out.println("La empresa recicla " + valor[i] + " toneladas de plástico");
} else if (material[i].equals("papel")) {
valor[i] = (80 * toneladas3) / 100;
System.out.println("La empresa recicla " + valor[i] + " toneladas de papel");
} else {
valor[i] = 0;
System.out.println("No Aplica");
}
}
break;

case "e":
System.out.println("Digite la cantidad de toneladas producidas");
toneladas4 = entrada.nextInt();

for (i = 0; i < 3; i++) {

System.out.println(
"Escriba el tipo de material: papel, vidrio ó " + "plastico EN MINÚSCULAS Y SIN TÍLDES");
material[i] = entrada.next();

if (material[i].equals("vidrio")) {
valor[i] = (95 * toneladas4) / 100;
System.out.println("La empresa recicla " + valor[i] + " toneladas de vidrio");
} else if (material[i].equals("plastico")) {
valor[i] = (10 * toneladas4) / 100;
System.out.println("La empresa recicla " + valor[i] + " toneladas de plástico");
} else if (material[i].equals("papel")) {
valor[i] = (80 * toneladas4) / 100;
System.out.println("La empresa recicla " + valor[i] + " toneladas de papel");
} else {
valor[i] = 0;
System.out.println("No Aplica");
}
}
break;

}

}

System.out.println("Empresa toneladas material valor");
System.out.println("---------------------------------------------");

for (i = 0; i < 5; i++) {

System.out.println(empresa[i] + " " + toneladas + " " + material[i] + " " + valor[i]);
System.out.println(empresa[i] + " " + toneladas1 + " " + material[i] + " " + valor[i]);
System.out.println(empresa[i] + " " + toneladas2 + " " + material[i] + " " + valor[i]);
System.out.println(empresa[i] + " " + toneladas3 + " " + material[i] + " " + valor[i]);
System.out.println(empresa[i] + " " + toneladas4 + " " + material[i] + " " + valor[i]);

}
}

}
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
sin imagen de perfil

No funciona mi for y hace el código infinitas veces

Publicado por Roberto (7 intervenciones) el 29/05/2022 19:06:41
Al momento que creas el primer for inicializas la variable i = 0, empieza a correr el ciclo for pero enseguida creas otro for y usas la misma variable i y de nuevo le das valor 0, i = 0, entones como le estas dando valor 0 de nuevo a la variable i, el primer ciclo for nunca terminara ya que solo esta tomado valor 0,1,2,3 y nunca llega al 5

En el primer for usa otra variable que no sea i, declara una nueva variable para ese for.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

No funciona mi for y hace el código infinitas veces

Publicado por Kabuto (1381 intervenciones) el 29/05/2022 19:07:39
El principal problema es que para todos los bucles FOR, estás usando la misma variable i

Entonces, el bucle FOR principal que debería pedir datos para 5 empresas:
1
for (i = 0; i < 5; i++) {

Nunca termina, nunca llega al valor 5, porque los otros bucles FOR están alterando el valor de esa i,
1
for (i = 0; i < 3; i++) {

de manera que cuando el flujo del programa regresa al bucle FOR principal, la i SIEMPRE tiene valor 2 , porque los otros bucles lo han alterado y han hecho un recorrido del 0 al 2 (i < 3)

Sugiero que para el bucle FOR principal, uses otra variable como índice, por ejemplo una e (de empresa), así ya te aseguras de que ese índice es exclusivo para recorrer el array de empresas:
1
2
3
4
5
6
7
8
9
10
//
		for (int e = 0; e < 5; e++) {
 
			System.out.println("Digite la letra de su empresa a,b,c" + ",d ó e EN MINÚSCULAS");
			empresa[e] = entrada.next();
 
			switch (empresa[e]) {
			case "a":
				System.out.println("Digite la cantidad de toneladas producidas");
				toneladas = entrada.nextInt();


Por otra parte, al final del código tienes otro problema.

Para mostrar los datos finales, vuelves a recorrer las 5 empresas con otro bucle FOR. Llegados a ese punto del programa, ahí ya da igual si usas la i o la e...., el problema es que ese mismo índice, lo usas también para recorrer los arrays de material y valor
1
2
3
4
5
6
7
8
9
10
//
		for (i = 0; i < 5; i++) {
 
			System.out.println(empresa[i] + " " + toneladas + " " + material[i] + " " + valor[i]);
			System.out.println(empresa[i] + " " + toneladas1 + " " + material[i] + " " + valor[i]);
			System.out.println(empresa[i] + " " + toneladas2 + " " + material[i] + " " + valor[i]);
			System.out.println(empresa[i] + " " + toneladas3 + " " + material[i] + " " + valor[i]);
			System.out.println(empresa[i] + " " + toneladas4 + " " + material[i] + " " + valor[i]);
 
		}
¿Y por qué es un problema?
Porque esos arrays, material y valor, solo tienen 3 posiciones, pero tu vas a usar con ellos un índice que recorre 5 posiciones.
Así que eso provocará una excepción, ya que se va apuntar a posiciones que no existen.

No se decirte como solucionar eso, porque no me queda claro cuál es la lógica que se pretende conseguir.
De hecho, posiblemente te estés encontrando con este problema porque se está aplicando una lógica equivocada.

Por ejemplo, en el switch hay un case según si la empresa es a, b, c, d , e....
Pero luego esos "cases", son idénticos. Solo cambia que para pedir las toneladas al usuario se usan diferentes variables: toneladas, toneladas1, toneladas2, etc...
Pero no parece ser necesario usar distintas variables, total luego al final cuando se van a presentas datos en pantalla, esas variables son irrelevantes. Solo importa lo que haya en los arrays, así que las lecturas de las toneladas se podrían haber hecho todas con la misma variable.
Mejor dicho, se podría haber hecho sin necesidad de ningún switch.

Sería interesante que publicases el enunciado del ejercicio, para que sepamos cuál es el objetivo a cumplir. Quizás entonces te podamos proponer una solución siguiendo otra lógica.

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar