Java - Guardando los ultimos valores de una lista

 
Vista:
Imágen de perfil de Claverator
Val: 10
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Guardando los ultimos valores de una lista

Publicado por Claverator (7 intervenciones) el 23/11/2018 13:35:14
Por mucho que meto con este ejercicio no lo entiendo alguien me puede echar una mano Gracias:


Escribe un programa que acepte desde teclado una serie de números enteros y finalice cuando se
introduzca uno mayor que la suma de los dos anteriores. Al final de un programa aparecerá en
pantalla la cantidad de números introducidos y los valores que cumplieron la condición de
finalización del programa.
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

Guardando los ultimos valores de una lista

Publicado por Kabuto (1381 intervenciones) el 24/11/2018 00:34:19
Hola.
Necesitas una estructura dinámica para ir guardando los datos que se van introduciendo.
Por dinámica me refiero a que no va a servir un simple array, ya que a los arrays básicos hay que darles una longitud prefijada, que luego no puede variar.
Y no puedes dársela porque no sabes cuántos números va a introducir el usuario. Puede introducir 5, 10, 100, ....., 100000....

Necesitas una estructura similar, pero que sí sea dinámica. Es decir, no tiene una longitud fija, sino que puede ir creciendo cada vez que se le añade un nñumero.
Hay multitud de este tipo de estructuras para elegir, pero como lo que necesitamos es bastante simple, podemos utilizar la clase Vector y decirle que va almacenar objetos Integer.
Esta clase no admite datos primitivos, como int, double, char......solo admite objetos de clases.
Por eso le indicamos que use Integer, que viene a ser lo mismo que un int, pero orientado a objetos.

1
Vector<Integer> numeros = new Vector<Integer>();

Y en ese Vector llamado "numeros", se pueden ir metiendo tantos números como queramos.

Así que los pasos a seguir, sería:
- Declarar un Scanner para pedir datos por teclado.
- Declarar el Vector de números.

- Iniciar un bucle while y decidir como queremos indicarle cuando ha de terminar. Yo usaría un boolean declarado previamente con valor TRUE y mientras mantenga el valor TRUE, el bucle se irá repitiendo.
Cuando se cumpla el objetivo propuesto por el enunciado, es decir, el último número leído es mayor que los dos introducidos anteriormente, cambiaremos el valor de este boolean a FALSE para que el bucle sepa que ha de terminar.

- Dentro del bucle pedimos número.
- Comprobamos si es mayor que los dos anteriores, pero ¡ojo!. Las dos primeras veces no tendremos todavía números guardados para comparar, así que antes de comparar hemos de preguntar si el Vector tiene suficientes números, es decir, que su tamaño sea mayor o igual a 2.
- Si se cumple la condición del enunciado, informamos en pantalla de los números que han hecho cumplir la condición y pasamos el boolean a FALSE para que el bucle no siga.
- Si no se cumple, no haremos nada, dejar que el bucle se repita.

-Se cumpla o no, guardamos el numero introducido por el usuario en el Vector.

- Terminado el bucle, informarmos del total de números introducidos.
- FIN

Esos son los pasos inténtalo hacer tú. No importa si no lo consigues, lo importante es intentarlo y ver que problemas o duda te surgen.
Aún así, aquí te dejo un código ya resuelto, tú decides cuando mirarlo, pero insisto que es mejor intentarlo tú primero y solo consultarlo cuando te atasques.
Un saludo.
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
import java.util.Scanner;
import java.util.Vector;
 
public final class UltimosValores {
 
	public static void main(String[] args) {
		Scanner teclado = new Scanner(System.in);
		Vector<Integer> numeros = new Vector<Integer>();
		boolean continuar = true;
 
		while(continuar) {
			System.out.print("Introduzca un número: ");
			Integer numeroIntroducido = teclado.nextInt();
			/*
			 * Se ha introducido un numero, hay que ver si la suma de los dos anteriores
			 * Pero, al principio de todo no tendremos números introducidos con los que 
			 * comprobar, así que solo lo haremo si tenemos suficientes números guardados
			 */
			int total = numeros.size();
			if (total >= 2) //Sí que hay numero suficientes, probamos a sumar
			{
				int ultimo = numeros.get(total -1); //Ultima posicion del Vector
				int penultimo = numeros.get(total -2); //Penultima posicion del Vector
 
				if ((ultimo + penultimo) < numeroIntroducido) //Se cumple la condición del enunciado
				{
					System.out.printf("\nEL numero %d es mayor que los dos anteriores", numeroIntroducido);
					System.out.printf("\nLos dos numeros anteriores son %d y %d", ultimo, penultimo);
					continuar = false; //Ponemos fin al bucle
				}
			}
			//Guardamos último numero introducido
			numeros.add(numeroIntroducido);
		}
		teclado.close();
		//Finalizado el while informamos de la cantidad de numeros introducidos
		System.out.printf("\nSe han introducido %d números en total", numeros.size());
	}
}
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 Guillermo
Val: 10
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Guardando los ultimos valores de una lista

Publicado por Guillermo (7 intervenciones) el 24/11/2018 14:21:07
De acuerdo se agradece un monton aunque creo que lo puedo sacar sin vectores pero muchisimas 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 Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Guardando los ultimos valores de una lista

Publicado por Kabuto (1381 intervenciones) el 24/11/2018 23:51:42
También se podría.

Usando tres variables int, que podrían llamarse: penultimo, ultimo y actual.

Actual tendría el número recién introducido.
Y cada vez que pidas un número al usuario, el valor de ultimo pasa a penultimo, el valor de actual pasa a ultimo, y actual recibe el nuevo valor por teclado.

Con una cuarta variable contador vas contando lo valores introducidos, cuanto tengas más de dos introducidos, entonces empiezas a comprobar si la suma de penultimo y ultimo es menor al numero actual.
Si se cumple, terminar el bucle.
Si no, sigues pasando valores entre variables y pidiendo números

La mecánica sería muy similar al ejemplo anterior en realidad.
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 Guillermo
Val: 10
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Guardando los ultimos valores de una lista

Publicado por Guillermo (7 intervenciones) el 26/11/2018 00:38:32
VAAAAAALE muchas gracias esa solución se asemeja mas a mi nivel ahora mismo
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