Java - Consulta con bucles

   
Vista:

Consulta con bucles

Publicado por Luciano (1 intervención) el 01/12/2014 17:23:04
Hola, soy nuevo por aquí y en este tema de programar en Java, y ya me han matado con un ejercicio super largo con arraylist. El caso es que tengo un problema. Tengo un menú en el que:
1 - Cargo por teclado el arraylist con números infinitamente hasta que ingreso 0 (El cero no se carga)
2 - La suma de todos los valores del arraylist
3 - Promedio de todos los valores del arraylist
4 - Lista con todos los índices y su respectivo valor
5 - Buscar un índice y que salga su valor
6 - Cantidad de números positivos y negativos además de mostrar el tamaño del arraylist

El problema es con el 2 y el 3, ya que (por ejemplo), al cargar los números 10 y 20, y luego seleccionar la opción de sumar, al principio da 30 (como debería). Pero si sigo seleccionándola, empieza a sumar de a 30, pero yo solo quiero que muestre la suma de todos los valores, pero no que siga sumando ese producto.
Los mismo sucede con el 3, el promedio que hace cada vez que se selecciona es primero hacer el promedio de 30 y luego el de 60, 90, 120...

También un problema con el 6: Cambié el código varias veces y lo único que sale bien es el tamaño del arraylist, pero de una forma u otra solo aparece la cantidad de positivos; pero la de negativos en 0 y viceversa.

Aquí dejo el código que se entenderá mejor de lo que expliqué xD:

import java.util.*;
import java.util.ArrayList;
public class MenúPersonas {




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



int numero = 0, op = 0, suma = 0, promedio = 0, contador = 0, contadoríndice = 0, índice = -1, valor = 0, pos = 0, neg = 0, cero = 0;
String op1, y = null, n;


Scanner input = new Scanner (System.in);

ArrayList<Integer> arl = new ArrayList<Integer>();

System.out.println("--- Menú ---");
System.out.println(" ");
System.out.println("1 - Ingreso de números");
System.out.println(" ");
System.out.println("2 - Suma");
System.out.println(" ");
System.out.println("3 - Promedio");
System.out.println(" ");
System.out.println("4 - Lista");
System.out.println(" ");
System.out.println("5 - Índice");
System.out.println(" ");
System.out.println("6 - Cantidad");
System.out.println(" ");


do{

System.out.print("Opción: ");
op = input.nextInt();
System.out.println(" ");


switch (op){
case 1:
do{
System.out.println("Ingresar");
numero = input.nextInt();
if(numero != 0){arl.add(numero);}
}while(numero != 0);

break;
case 2:
for(int i: arl){
suma = suma + i;
}
System.out.println(' ');
System.out.println("Suma: " + suma);
System.out.println(' ');
break;
case 3:
for (int i = 0; i < arl.size(); i++) {
contador = contador + arl.get(i);
}
promedio = contador/arl.size();
System.out.println(" ");
System.out.println("Promedio: " + promedio);
System.out.println(" ");
break;
case 4:
for (Integer número : arl) {
if(número != 0){
índice++;
System.out.println("Índice " + índice + " = " + número);}
}
System.out.println(" ");
break;
case 5:
System.out.println("Ingresar índice: ");
System.out.println(" ");
índice = input.nextInt();
if (índice != -1){
if(índice < arl.size()){
System.out.println(" ");
System.out.println("Índice " + índice + " con valor " + arl.get(numero));}
System.out.println(" ");
}
if(índice > arl.size()){
System.out.println("Éste índice no existe");
System.out.println(" ");
}
if (índice == arl.size()){System.out.println("Éste índice no existe");
System.out.println(" ");}
break;

case 6:
for (int i = 0; i < arl.size(); i++) {
if (arl.get(numero) > 0) {
pos++;}
if (arl.get(numero) < 0) {
neg++;}
}
//mostrar resultados
System.out.println("Números positivos: " + pos);
System.out.println("Números Negativos: " + neg);
System.out.println("Tamaño de arl: " + arl.size());
break;

default:
System.out.println("***ERROR*** Elija otra opción");
System.out.println(" ");
}

}while (op != 0);

}

}

Espero obtener ayuda a la brevedad. Se que deben ser errores pequeños. Saludos
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
Imágen de perfil de Julio Cesar

Consulta con bucles

Publicado por Julio Cesar (30 intervenciones) el 01/12/2014 17:43:54
hola mira...en la opcion 2 tienes que hacer cero la variable suma sino, como es un ciclo se mantiene siempre con el valor q se le asigno y por eso es q suma de 30 en 30..
despues de imprimir el resultado de la suma solo tienes q hacer esto suma =0;

1
2
3
4
5
6
7
8
9
case 2:
for(int i: arl){
suma = suma + i;
}
System.out.println(' ');
System.out.println("Suma: " + suma);
System.out.println(' ');
suma=0;
break;

para el caso tres lo mismo..hacer la variable promedio y contador cero...
1
2
3
4
5
6
7
8
9
10
11
case 3:
for (int i = 0; i < arl.size(); i++) {
contador = contador + arl.get(i);
}
promedio = contador/arl.size();
System.out.println(" ");
System.out.println("Promedio: " + promedio);
System.out.println(" ");
promedio=0;
contador=0;
break;
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 Julio Cesar

Consulta con bucles

Publicado por Julio Cesar (30 intervenciones) el 01/12/2014 19:32:41
para el seis....aqui tienes el arreglo..en los if estabas usando arl.get(numero) que devolvia un numero pero no te era lo q querias.....

1
2
3
4
5
6
7
8
9
10
11
12
13
14
case 6:
for (int i = 0; i < arl.size(); i++) {
if (arl.get(i) > 0) {
pos++;}
if (arl.get(i) < 0) {
neg++;}
}
//mostrar resultados
System.out.println("Números positivos: " + pos);
System.out.println("Números Negativos: " + neg);
System.out.println("Tamaño de arl: " + arl.size());
pos=0;
neg=0;
break;
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