Foros aprenderaprogramar.com
Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: Raquel en 12 de Septiembre 2021, 22:51
-
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.
-
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í (https://www.aprenderaprogramar.com/index.php?option=com_content&view=article&id=605:interface-list-clase-linkedlist-api-java-ejercicio-diferencias-entre-arraylist-y-linkedlist-codigo-cu00921c&catid=58&Itemid=180)
El programa te pide algo así.
Primero una clase Ubicacion, que sea capaz de compararse mediante sus coordenadas para ordenarse de forma ascendente:
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:
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
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.