Mejor ED para ciudad:poblacion - Java

Pizzelio

Buenas, tengo una práctica en la que tengo que trabajar con una lista de ciudades y sus poblaciones. En el enunciado nos pide chorradas varias como mostrarlas ordenadas por población. El caso es que el profesor ha hecho la guarrada máxima en un código de ejemplo que yo me niego a seguir. Es algo tal que así (me invento los datos):

String ciudades [ ] = {"madrid", "atenas", "paris"};
String poblacion [ ] = {"3000000", "2000000", "9000000"};
int orden [ ] = {2, 0, 1};

Y utiliza el array orden para mostrarlas ordenadas porque las coloca de manera que la misma posición de cada array coincida con la ciudad y su población. Le he preguntado como va a tener que hacerse de esta manera tan sumamente guarra y me ha dicho que esto se hace así y ya está. Me niego a creerle.

Cuál sería la mejor forma de hacerlo?

Gracias

B

Y porque iba a ser una guarrada segun tu? Imaginate que el orden no depende de tu programa sino que viene de otro sistema externo, igualmente tienes que ordenarlos segun te hayan ordenado que lo hagas.

1 respuesta
Pizzelio

#2 En ese ejemplo hay 3 ciudades, si hubiera 1000 cómo haces? Ponerlas a manita como ha hecho él?

Osea lo que me parece una guarrada es que haga un array orden a mano con el orden de las ciudades.

1 respuesta
HeXaN
#1Pizzelio:

Cuál sería la mejor forma de hacerlo?

Un diccionario, por ejemplo. Creo que en JAVA eran los Map.

1 respuesta
Pizzelio

#4 Lo que pasa con eso es que los mapas no están ordenados no?

3 respuestas
B

#3 Lo que te quiero decir es que el orden[] es el input de tu programa, da igual como te venga, no estas haciendo un proyecto de verdad sino un ejercicio simple donde se te pide que ordenes segun x entrada. La programación orientada a objetos suele consistir en separar tu programa en pequeñas partes, saber identificarlas e implementarlas es importante.

HeXaN

#5 Puedes añadirle un campo para indicar el orden. Aunarías las tres estructuras de datos en una. Pero vamos, es una opción como la que presentas en #1.

willy_chaos

#5 SortedMap, aunque lo ordena por alfabetico XDD

Pero vamos, en mi caso creaba un class con los 3 atributos , recorria el array para crearlos y luego los ordenaba en el array como pidieran.

public class Ciudad {
	public String nombre;
	public int poblacion;

public Ciudad(String pNombre, int pPoblacion)  {
	this.nombre = pNombre;
	this.poblacion = pPoblacion;
}
}

Luego en el array, puedes hacerlo tu manualmente la comparación para ordenarlo, hay algoritmos de ordenación. También puedes usar sort pero para eso tienes que meter un método dentro de la clase que básicamente compare los campos por los que quieres comparar.

Ejemplo: https://guru99.es/string-compareto-method-java/

3 1 respuesta
Pizzelio

#8 Muuuchas gracias

djamb

Quiero pensar que es tu primer año de programación y el profesor os está enseñando la razón por la que aplicar orientación a objetos.

1 respuesta
Pizzelio

#10 No lo es, es un profesor de mierda.

1
Fyn4r

Pero el array ese de las posiciones lo hace a mano?

1 respuesta
Pizzelio

#12 Sí, mira cual sería el orden y lo pone él. Después añade más ciudades y lo tiene que ajustar de nuevo.

1 respuesta
nerkaid

#13 ¿Pero y la relación entre el orden de las ciudades y el orden de las coordenadas de donde sale?

1 respuesta
Camp1

Pues defendiendo un poco a tu profesor, "estoy de acuerdo con él". El objetivo del ejercicio es que sepas trabajar con arrays a "bajo nivel". Por supuesto que no es la opción más eficiente ni mucho menos pero es la más fácil para una persona nueva en el mundillo.

La ciudad tendrá el número de habitantes coincidente con su índice en el array. Y un tercer array para que almacenes los resultados de la ordenación que sea, en este caso es por habitantes (imagino que el ejercicio te pedirá más casos).

Simplemente no te quedes con lo que te dice tu profesor, ve más allá y piensa en otras posibles soluciones y por qué serían mejor o peor en cada caso. Sería mucho pedir ya que le eches un ojo a algoritmos de ordenación y su eficiencia en según su situación, pero todo es cosa tuya.

Es muy fácil decir que tu profesor no tiene ni puta idea (que muchas veces es el caso) pero la verdad que tienen que adaptarse al nivel medio de la clase.

1 respuesta
Pizzelio

#14 Sale de que él lo coloca así todo a mano dentro del código.

#15 Entiendo que pienses así con el contexto que he dado pero es que el objetivo del ejercicio no es utilizar arrays a bajo nivel. Es una práctica de una asignatura de programación en Android en la cual el objetivo es aprender y practicar a manejarnos con botones, textview, listview etc. Como dije en otro comentario no es el primer año ni la primera asignatura de programación.

Sobre lo que dices de pensar otras posibles soluciones por mi mismo, por supuesto que ya lo he hecho y también he buscado en internet. He preguntado aquí en última instancia para ver que opinaba gente que sabe muchísimo más que yo y con suerte aprender algo de sus ideas.

Otras lindezas de este profesor es que nos quejamos porque no explicaba nada y no había escrito ni una línea de código en clase. Se lo dijeron y en la última clase se puso a ello, resultado:
-Iba leyendo de un cuaderno lo que tenía que escribir y llegado un punto tenía un fallo que no era capaz de encontrar. Se lo solucionó un alumno.
-Respuestas a dudas en plan: Esto se copia y pega así y ya está, así se hace esto en android.
-En el mismo ejemplo de las ciudades, quiere recorrerlo a la inversa y en lugar de hacer un bucle escribe a mano él mismo las posiciones según como quiere que salgan. Menos mal que solo eran 3.

Podría seguir pero creo que ya habrá quedado suficientemente claro xD

1 1 respuesta
privet

Enseñar así no tiene mucho sentido, cuando existe la probabilidad de que existan miles de datos, que en el ejercicio serán 3 pero también puedes hacerlo para aprender si tienes un número indeterminado

WBIndieGame

Manera fácil: Puedes crearte una clase que represente a una ciudad, con atributos nombre y población y definirte un arraylist de esa clase, ordenas por población con Comparator, lo tienes en la API

Evidentemente, el profesor va a mínimos y quiere que aprendais a gestionar arrays de clases.

Te vas a dar cuenta, de que a veces es útil currarse mucho un código y otras no. Depende del alcance y de la robustez y flexibilidad que requieras. Al final tienes objetivos, plazos y tiempo limitado.

Lo de usar un array de posiciones es un truco muy útil para prototipar o definir un código muy estático donde sacrificas flexibilidad cuando no lo necesitas.

Pero eso no es una guarrada, es una decisión de diseño. Guarradas son otras cosas, ese código de tu profesor tiene sus limitaciones, pero es técnicamente correcto

1
X-Crim

cuanto tiempo llevas programando?

Soraghatsu

yo haria un arraylist de un objeto Ciudad que tenga 2 propiedades, ciudad y poblacion, luego mediante Collections.sort() y mediante un Comparator los ordenas

related: https://www.mkyong.com/java/java-object-sorting-example-comparable-and-comparator/

1 1 respuesta
nerkaid

#16 ¿Entonces que mas da el formato en el que te de la información? Luego tu manopúlala como consideres.

Kaledros

#5 Depende de la implementación que uses, ten en cuenta que Map es sólo una interfaz.

HashMap no está ordenado (y no garantiza el orden durante la iteración), SortedMap ordena por orden numérico/alfabético (y creo que alguno más, tiro de memoria) y luego está LinkedHashMap que el orden de iteración es el de inserción. Hay más, pero ya sería meternos en más profundidad y no creo que te interese para lo que preguntas.

1 respuesta
B

Tu profesor tiene pinta de hacer mucho tiempo que no programa y haberse acostumbrado a lenguajes muy antiguos. No me preguntes a cual, porque hasta en C tienes structs para agrupar datos y la posibilidad de ordenar con comparadores custom.

Yo haria lo que dice #20 e implementar comparadores segun feature.

#22 SortedMap es una interfaz tambien, una implementacion concreta seria TreeMap por ejemplo. Que yo sepa ordenan llamando al compareTo de turno o con un Comparator que le pases a la constructora.

1 respuesta
Soraghatsu

lo unico, que espero que lo hagas de la forma que lo hagas el profesor no se enfade, y te diga no vale, porque no lo has hecho con lo que te he dado xd

Kaledros

#23 Toda la razón, lo acabo de mirar porque me has hecho dudar y sí, SortedMap es una interfaz. Me había liado el diagrama de la Wikipedia, que está mal (y lo pone en los comentarios, pero se ve que nadie lo ha cambiado) y pone que es una clase abstracta.

Usuarios habituales