Java - Ingresar tantos números como desee en un arraylist

 
Vista:
sin imagen de perfil
Val: 25
Ha aumentado su posición en 1146 puestos en Java (en relación al último mes)
Gráfica de Java

Ingresar tantos números como desee en un arraylist

Publicado por andre (15 intervenciones) el 10/06/2021 09:20:05
escriba un programa que permita al usuario ingresar tantos números como desee en un arraylist y que finalice cuando el usuario presione enter

en mi caso logre hacer que ingrese solo 5 números pero me gustaría poder ingresar cualquier cantidad de números y que al final me despliegue la suma de todos los números ingresados



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
public class ArrayListSum {
 
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int maxo=0;
 
		String nombre="";
				String entradaTeclado = "";
				Scanner scanner =new Scanner(System.in);
 
 
				int ban,num1 = 0;
 
				do {
 
					int[] arr=new int[5];
					//do ingrese numero
 
 
					do {
						ban=0;
 
 
					try {
 
 
 
 
						for(int i=0;i<arr.length;i++)
						{
 
							System.out.println("ingrese numero ");
 
						arr[i]=scanner.nextInt();
 
						}
						System.out.println("Los números son ");
						int j=0;
						int h1=0;
						while(j<=4) {
							System.out.println(+h1+" ["+arr[j]+"]");
							j++;
							h1++;
						}
 
 
 
 
					}catch(Exception e){System.out.println("Invalid answer please enter a  whole number");ban=1;scanner.nextLine();}
					}
					while(ban!=0);
 
 
 
 
 
					//llamada a metodos
				int total = 0;
 
				maxo=sumValues(total,arr);
 
 
 
					//continua
				   do {
						   	System.out.println("Do you wish to continue?  answer 'Y' or 'N'");
				           Scanner entradaEscaner = new Scanner (System.in);
				           entradaTeclado = entradaEscaner.nextLine ();
 
				           if(entradaTeclado.equals("y")||entradaTeclado.equals("Y"))
						   	{
 
 
						   	}
 
				           else if(entradaTeclado.equals("n")||entradaTeclado.equals("N"))
				   	{
				   	System.out.println("finished program");
				   	 System.exit(0);
				   	}
				           else
						   	{
						   	System.out.println("Invalid Answer! Reply with a 'Y' or 'N'");
 
 
						   	}
 
 
 
				   }
				   while(!entradaTeclado.equals("y")&&!entradaTeclado.equals("Y"));
 
 
 
 
 
		}
 
 
		while(entradaTeclado.equals("y")||entradaTeclado.equals("Y"));
			}
 
 
 
 
 
 
	//metodo 2
 
 
	static int sumValues(int total,int[] arr)
	{
 
int[] sum=arr;
 
for(int i=0;i<arr.length;i++) {
total+=arr[i];
 
}
 
System.out.println("la suma es "+total);
return total;
	}
 
		}
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 Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Ingresar tantos números como desee en un arraylist

Publicado por Kabuto (1381 intervenciones) el 10/06/2021 12:01:03
Hola.

No estás usando ningún ArrayList.

Estás usando un array primitivo (también llamado arreglo, vector, ...). Los arrays primitivos tienen la desventaja de que su tamaño es fijo. Al crearlos hay que especificar un tamaño y este no podrá variar durante la ejecución del programa.

En cambio un ArrayList es una clase más avanzada. Es un tipo de colección cuyo tamaño es "dinámico", es decir, puede aumentar o disminuir durante la ejecución del programa, según si introducimos o extraemos datos.

Por eso este ejercicio lo proponen de manera que el usuario pueda terminar la entrada de datos en cualquier momento, porque no hay un mínimo o un máximo de datos que pueda introducir. Podrá teclear todos los valores que quiera, hasta que haga una entrada "vacía" (simplemente pulsar ENTER para terminar)

Te dejo un ejemplo de lo que propones usando un ArrayList.
Para poder aceptar una entrada de datos "vacía", hay que usar nextLine() para que el Scanner lea por teclado, y luego convertir la lectura a Integer para poder guardarlo en el ArrayList.

Se podría usar nextInt() para que el Scanner recoja enteros directamente, pero este método no acepta entrada de datos "vacía". Si el usuario pulsa ENTER sin introducir nada porque ya quiere terminar, el método nextInt() no lo aceptará y seguirá pidiendo el dato hasta que el usuario le de un valor numérico.


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 IngresarNumeros {
 
	public static void main(String[] args) {
 
		Scanner scanner = new Scanner(System.in);
		//ArrayList para enteros
		ArrayList<Integer> numeros = new ArrayList<Integer>();
 
		boolean continuar = true;
		while(continuar) {
			System.out.print("\nIngrese número entero(ENTER para salir): ");
			/*
			 * Si queremos poder detectar una entrada de datos vacía, es decir,
			 * que el usuario pulsa ENTER sin meter ningún valor, entonces
			 * hay que usar nextLine() para leer el teclado
			 * nextLine() nos da un String, así que habrá que convertirlo
			 * a Integer para guardarlo en el ArrayList
			 */
			String entrada = scanner.nextLine();
			if (entrada.isBlank()) //Se ha pulsado ENTER sin meter ningún valor
				continuar = false; //Se pondrá fin a la entrada de datos
			else {
				//Convertimos a Integer para guardar en ArrayList, controlando posible excepcion
				try {
					numeros.add(Integer.parseInt(entrada));
				}
				catch(NumberFormatException ex) {
					System.out.println("ERROR. No ha introducido un valor entero.");
				}
			}
 
		}
		scanner.close();
 
		//La entrada de datos ha finalizado. Mostramos los números en pantalla
		System.out.println("\n\t\tNumeros introducidos");
		System.out.println("\t\t------- ------------");
 
		if (numeros.isEmpty()) //ArrayList esta vacío
			System.out.println("No se han introducido valores.");
		else {
			for (int i = 0; i < numeros.size(); i++) {
				System.out.println((i+1) + "# [" + numeros.get(i) + "]");
			}
			System.out.println("\nSuma de los valores: " + sumarValores(numeros));
		}
	}
 
	/**
	 * Recibe un ArrayList de enteros y devuelve su suma.
	 * @param listaNumeros ArrayList con valores Integer
	 * @return La suma de todos los valores.
	 */
	static int sumarValores(ArrayList<Integer> listaNumeros) {
		int suma = 0;
 
		for (int numero: listaNumeros)
			suma += numero;
 
		return suma;
	}
 
}

Si lo ejecutamos, en pantalla tendríamos este resultado:
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
Ingrese número entero(ENTER para salir): 23
 
Ingrese número entero(ENTER para salir): 12
 
Ingrese número entero(ENTER para salir): 56
 
Ingrese número entero(ENTER para salir): 0
 
Ingrese número entero(ENTER para salir): 5
 
Ingrese número entero(ENTER para salir): texto
ERROR. No ha introducido un valor entero.
 
Ingrese número entero(ENTER para salir): 100
 
Ingrese número entero(ENTER para salir):
 
		Numeros introducidos
		------- ------------
1# [23]
2# [12]
3# [56]
4# [0]
5# [5]
6# [100]
 
Suma de los valores: 196
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
sin imagen de perfil
Val: 25
Ha aumentado su posición en 1146 puestos en Java (en relación al último mes)
Gráfica de Java

Ingresar tantos números como desee en un arraylist

Publicado por andre (15 intervenciones) el 11/06/2021 06:45:27
a este mismo ejercicio como puedo agregarle un método que me detecte los números que se repiten del arraylist y me devuelva otro arraylist que contenga los números duplicados logre crearle este metodo pero solo me detecta las veces que se repite el primer numero ingresado

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public static int repetidos( ArrayList<Integer> listaNumeros){
 
    int h=0;
 
    while (listaNumeros.size()>0) {
        int numVeces=0;
        int val=listaNumeros.get(0);
        for (int y = h; y < listaNumeros.size(); y++) {
            if(val==listaNumeros.get(y)){
                numVeces++;
                listaNumeros.remove(y);
               y--;
            }
        }
        System.out.println("El número: "+val+" se repite: "+numVeces);
        return numVeces;
    }
 
    return h;
}
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 Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Ingresar tantos números como desee en un arraylist

Publicado por Kabuto (1381 intervenciones) el 11/06/2021 12:13:12
En cuanto haces un return, el método se acaba, así que solo estás operando con el primer número.

Por otro lado, ir quitando números del ArrayList puede ser una estrategia arriesgada....

Además, tu método no retorna ningún ArrayList, estaría devolviendo un solitario valor int.


Si queremos mostrar los valores repetidos, y cuántas veces se repite cada uno, para no complicarlo demasiado se puede hacer que el método sea void y no retorne nada, pero que él mismo confeccione dos listas y las muestre.
Una lista serán los números repetidos encontrados.
La otra lista, serán contadores para anotar cuántas veces se repite cada valor encontrado.

Con bucles anidados, recorremos cada número de la lista original (sin alterarla) y comprobamos si hay repetidos en las posiciones posteriores a dicho número.
Al encontrar el primer valor repetido, lo anotamos en la lista de repetidos e inicializamos el contador de repeticiones en la otra lista con valor 1.

Al pasar al siguiente número, si es resulta que de nuevo es el repetido encontrado anteriormente, (lo sabremos porque ya estará en la lista) en este caso lo único que hacemos es incrementar el contador de veces repetido que corresponde a este número.


Al terminar, tendremos las dos listas confeccionadas, así que las recorremos y mostramos la info en pantalla.

Te dejo este método:
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
static void listarRepetidos(ArrayList<Integer> listaNumeros) {
 
		ArrayList<Integer> repetidos = new ArrayList<Integer>();
		ArrayList<Integer> vecesRepetido = new ArrayList<Integer>();
 
		 //Recorre cada número de la lista
		for (int i = 0; i < listaNumeros.size(); i++) {
			 //Número actual que estamos consultando
			int numeroActual = listaNumeros.get(i);
 
			if (repetidos.contains(numeroActual)) { //Este número es un repetido ya encontrado
				//Averiguamos en que posicion de la lista está apuntado
				int posicion = repetidos.indexOf(numeroActual);
				//Ya sabemos posicion, incrementamos contador
				vecesRepetido.set(posicion, vecesRepetido.get(posicion) + 1);
			}
			else
				//Recorre los números posteriores al actual
				for (int j = i+1; j < listaNumeros.size(); j++) {
					//Recorre los números posteriores al actual
					int numeroPosterior = listaNumeros.get(j);
					//comparamos números a ver si es un repetido
					if (numeroActual == numeroPosterior) //Es un repetido
						//Apuntamos en la lista e inicializamos contador
						if (!repetidos.contains(numeroPosterior)) {
							repetidos.add(numeroPosterior);
							vecesRepetido.add(1);
						}
				}
		}
 
		/*
		 * Bucles terminados.
		 * Tenemos dos listas, las de valores repetidos y la de cuantas veces se repite cada valor.
		 * Mostramos en pantalla.
		 */
 
		System.out.println("\nValores repetidos:");
		if (repetidos.isEmpty())
			System.out.println("No hay repetidos.");
		else
			for (int i = 0; i < repetidos.size(); i++) {
				System.out.print((i+1) + "# [" + repetidos.get(i) + "]");
				System.out.println("\t---> Veces encontrado: " + vecesRepetido.get(i));
			}
	}

Lo podemos llamar justo tras mostrar la suma de valores en el programa principal:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
.............................
		.....................................
		//La entrada de datos ha finalizado. Mostramos los números en pantalla
		System.out.println("\n\t\tNumeros introducidos");
		System.out.println("\t\t------- ------------");
 
		if (numeros.isEmpty()) //ArrayList esta vacío
			System.out.println("No se han introducido valores.");
		else {
			//Mostramos valores
			for (int i = 0; i < numeros.size(); i++) {
				System.out.println((i+1) + "# [" + numeros.get(i) + "]");
			}
			//Calculamos su suma
			System.out.println("\nSuma de los valores: " + sumarValores(numeros));
 
			//Listamos valores repetidos
			listarRepetidos(numeros);
		}
	}


Si ejecutamos el programa, parece funcionar bien la detección y conteo de repetidos:

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
Ingrese número entero(ENTER para salir): 5
 
Ingrese número entero(ENTER para salir): 5
 
Ingrese número entero(ENTER para salir): 3
 
Ingrese número entero(ENTER para salir): 4
 
Ingrese número entero(ENTER para salir): 5
 
Ingrese número entero(ENTER para salir): 7
 
Ingrese número entero(ENTER para salir): 8
 
Ingrese número entero(ENTER para salir): 7
 
Ingrese número entero(ENTER para salir): 3
 
Ingrese número entero(ENTER para salir): 1
 
Ingrese número entero(ENTER para salir): 5
 
Ingrese número entero(ENTER para salir): 1
 
Ingrese número entero(ENTER para salir): 5
 
Ingrese número entero(ENTER para salir): 5
 
Ingrese número entero(ENTER para salir):
 
		Numeros introducidos
		------- ------------
1# [5]
2# [5]
3# [3]
4# [4]
5# [5]
6# [7]
7# [8]
8# [7]
9# [3]
10# [1]
11# [5]
12# [1]
13# [5]
14# [5]
 
Suma de los valores: 64
 
Valores repetidos:
1# [5]	---> Veces encontrado: 6
2# [3]	---> Veces encontrado: 2
3# [7]	---> Veces encontrado: 2
4# [1]	---> Veces encontrado: 2
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