Autor Tema: Java diferencia entre ArrayList y LinkedList programa para guardar ubicaciones  (Leído 1426 veces)

Raquel

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 6
    • Ver Perfil
Hola, agradecería ayuda para resolver este ejercicio.

Una ubicación tiene una coordenada en X y una coordenada en Y.

Cree una GUI para agregar ubicaciones. Las ubicaciones se guardan en una LinkedList.

Ordene las ubicaciones de acuerdo al orden natural: coordenada X asc y coordenada Y asc.
Muestre la ubicación con el mayor valor en la coordenada Y.
« Última modificación: 12 de Marzo 2022, 14:30 por Ogramar »

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 988
    • Ver Perfil
Re: Hola me podrian ayudar no entiendo muy bien linkedList
« Respuesta #1 en: 13 de Septiembre 2021, 18:28 »
Hola.
Una LinkedList es casi lo mismo que un ArrayList, solo que tiene mejor rendimiento insertando elementos, pero peor rendimiento haciendo búsquedas entre sus elementos.

Más info aquí

El programa te pide algo así.

Primero una clase Ubicacion, que sea capaz de compararse mediante sus coordenadas para ordenarse de forma ascendente:
Código: [Seleccionar]
package ubicacionLinkedList;

public class Ubicacion implements Comparable<Ubicacion>{

private int coordX;
private int coordY;

public Ubicacion(int cX, int cY) {
coordX = cX;
coordY = cY;
}

public int getCoordX() {
return coordX;
}

public int getCoordY() {
return coordY;
}

@Override
public String toString() {
return String.format("[X: %d / Y: %d]", coordX, coordY);
}

@Override
public int compareTo(Ubicacion otraUbicacion) {
if (coordX != otraUbicacion.coordX)
return Integer.compare(coordX, otraUbicacion.coordX);
else
return Integer.compare(coordY, otraUbicacion.coordY);
}

}

Luego, simplemente hay que añadir Ubicaciones a una LinkedList y mantenerlas ordenadas.
Finalmente buscar cuál es la que tiene mayor valor en la coordenada Y.

Lo pide con GUI, no tengo tiempo ahora, pero en modo consola vendría a ser algo como esto:
Código: [Seleccionar]
public class Test {

public static void main(String[] args) {

var ubicaciones = new LinkedList<Ubicacion>();
var teclado = new Scanner(System.in);
char continuar = 's';

while (continuar == 's') {
System.out.println("Nueva Ubicacion....");
System.out.println("Indique coordenada X: ");
int cX = Integer.parseInt(teclado.nextLine());
System.out.println("Indique coordenada Y: ");
int cY = Integer.parseInt(teclado.nextLine());
//Agregamos Ubicacion y las ordenamos
ubicaciones.add(new Ubicacion(cX, cY));
ubicaciones.sort(null);
//Las mostramos
System.out.println("\nUbicaciones registradas:");
for (Ubicacion ubi: ubicaciones)
System.out.println(ubi);

System.out.println("\n¿Continuar?[s/n]");
continuar = teclado.nextLine().toLowerCase().charAt(0);
}

//Buscamos coordenada con mayor Y
//Para comparar comenzamos con el mínimo valor posible para Y
Ubicacion mayorY = new Ubicacion(0, Integer.MIN_VALUE);

for (Ubicacion ubi: ubicaciones) {
if (ubi.getCoordY() > mayorY.getCoordY()) {
mayorY = ubi;
}
}

System.out.println("\nUbicacion con mayor Y:\n" + mayorY);

System.out.println("\n\n\t\tFIN DE PROGRAMA");
teclado.close();

}

}

En pantalla veremos que las Ubicaciones se van ordenando correctamente, y que al final muestra cuál tiene mayor valor Y

Citar
Nueva Ubicacion....
Indique coordenada X:
5
Indique coordenada Y:
5

Ubicaciones registradas:
[X: 5 / Y: 5]

¿Continuar?[s/n]
s
Nueva Ubicacion....
Indique coordenada X:
3
Indique coordenada Y:
3

Ubicaciones registradas:
[X: 3 / Y: 3]
[X: 5 / Y: 5]

¿Continuar?[s/n]
s
Nueva Ubicacion....
Indique coordenada X:
8
Indique coordenada Y:
8

Ubicaciones registradas:
[X: 3 / Y: 3]
[X: 5 / Y: 5]
[X: 8 / Y: 8]

¿Continuar?[s/n]
s
Nueva Ubicacion....
Indique coordenada X:
3
Indique coordenada Y:
9

Ubicaciones registradas:
[X: 3 / Y: 3]
[X: 3 / Y: 9]
[X: 5 / Y: 5]
[X: 8 / Y: 8]

¿Continuar?[s/n]
s
Nueva Ubicacion....
Indique coordenada X:
8
Indique coordenada Y:
1

Ubicaciones registradas:
[X: 3 / Y: 3]
[X: 3 / Y: 9]
[X: 5 / Y: 5]
[X: 8 / Y: 1]
[X: 8 / Y: 8]

¿Continuar?[s/n]
n

Ubicacion con mayor Y:
[X: 3 / Y: 9]


      FIN DE PROGRAMA

Y ya está. Según entiendo, esto es lo que se pide, pero mediante una GUI.

Un saludo.
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".