// /* Distancia entre ciudades */ /* Hecho por Dario Alejandro Alpern en agosto de 1998 */ import java.applet.*; import java.awt.*; public final class Dist extends Applet { private final float Rad = (float)Math.PI/(float)(180 * 60); /* Minutos a radianes */ private Checkbox cb1, cb2, cb3, cb4, cb5, cb6; private Button btnMenuPrincipal; private List Localidad1, Localidad2, Localidad3; private Button btnAveriguarDistancia; private Button btnVerCiudades; private Button btnSiguientePregunta; private boolean ConPaises; private boolean EnMenuPrincipal = false; private int Pregunta = 0; private int Ciud1, Ciud2; private GridBagLayout gridbag; private GridBagConstraints c = new GridBagConstraints(); private TextField textField; private int KmJugador, test, Puntos; private int[] Ciud = new int[6]; private final String[] Rumbos = {"NNE","NE","ENE","E","ESE","SE","SSE","S","SSO","SO","OSO","O","ONO","NO","NNO","N"}; private final String[] Ordinal = {"Primera", "Segunda", "Tercera", "Cuarta", "Quinta", "Sexta", "Séptima", "Octava", "Novena", "Última"}; private final String[] datosCiud = { "Acapulco,México:1651;-9954", "Alejandría,Egipto:3112;2957", "Amman,Jordania:3157;3557", "Amsterdam,Holanda:5223;454", "Anchorage,Alaska:6113;-14954", "Ankara,Turquía:3956;3252", "Asunción,Paraguay:-2518;-5737", "Atenas,Grecia:3759;2344", "Auckland,Nueva Zelanda:-3652;17444", "Bagdad,Irak:3318;4424", "Bangkok,Thailandia:1345;10031", "Barcelona,España:4123;211", "Beijing,China:3955;11623", "Beirut,Líbano:3352;3532", "Berlín,Alemania:5232;1326", "Bogotá,Colombia:437;-7405", "Bombay,India:1856;7249", "Brasilia,Brasil:-1547;-4754", "Bruselas,Bélgica:5051;421", "Bucarest,Rumania:4427;2606", "Buenos Aires,Argentina:-3437;-5823", "Calcuta,India:2230;8818", "Canberra,Australia:-3519;14904", "Caracas,Venezuela:1030;-6654", "Chicago,EEUU:4152;-8737", "Ciudad del Cabo,Sudáfrica:-3354;1825", "Copenhague,Dinamarca:5540;1234", "Córdoba,Argentina:-3124;-6411", "Dakar,Senegal:1442;-1727", "Damasco,Siria:3332;3620", "Dublín,Irlanda:5321;-616", "El Cairo,Egipto:3004;3114", "Estambul,Turquía:4100;2858", "Estocolmo,Suecia:5919;1804", "Godthaab,Groenlandia:6411;-5144", "Guadalajara,México:2042;-10319", "Guatemala,Guatemala:1437;-9031", "Helsinki,Finlandia:6010;2456", "Hong Kong,China:2216;11412", "Honolulú,Hawaii:2119;-15750", "Jerusalén,Israel:3148;3512", "Karachi,Pakistán:2451;6701", "Katmandú,Nepal:2743;8519", "Khartoum,Sudán:1538;3232", "Kiev,Ucrania:5025;3034", "La Habana,Cuba:2306;-8222", "La Meca,Arabia Saudí:2126;3949", "La Paz,Bolivia:-1629;-6808", "Lagos,Nigeria:627;326", "Lima,Perú:-1205;-7703", "Lisboa,Portugal:3844;-908", "Londres,Reino Unido:5129;-8", "Los Ángeles,EEUU:3403;-11814", "Luxemburgo,Luxemburgo:4937;608", "Madrid,España:4025;-341", "Managua,Nicaragua:1208;-8616", "Mar del Plata,Argentina:-3800;-5733", "Mendoza,Argentina:-3254;-6850", "México,México:1922;-9911", "Miami,EEUU:2546;-8012", "Milán,Italia:4529;911", "Monrovia,Liberia:618;-1047", "Montecarlo,Mónaco:4344;726", "Montevideo,Uruguay:-3454;-5609", "Montreal,Canadá:4530;-7336", "Moscú,Rusia:5545;3738", "Nicosia,Chipre:3510;3322", "Nueva York,EEUU:4043;-7401", "Oslo,Noruega:5955;1046", "Ottawa,Canadá:4525;-7543", "Panamá,Panamá:901;-7930", "París,Francia:4852;221", "Polo Norte,Sin país:9000;0", "Polo Sur,Sin país:-9000;0", "Praga,República Checa:5005;1425", "Puebla,México:1903;-9812", "Quito,Ecuador:-13;-7831", "Reykjavik,Islandia:6408;-2154", "Río de Janeiro,Brasil:-2253;-4314", "Roma,Italia:4154;1230", "Rosario,Argentina:-3258;-6039", "San Francisco,EEUU:3746;-12225", "San José,Costa Rica:956;-8405", "San Pablo,Brasil:-2331;-4638", "San Petersburgo,Rusia:5956;3019", "San Salvador,El Salvador:1342;-8912", "Santiago,Chile:-3327;-7039", "Seúl,Corea del Sur:3732;12659", "Shanghai,China:3114;12129", "Sofía,Bulgaria:4241;2320", "Sydney,Australia:-3353;15112", "Taipei,Taiwán:2503;12131", "Tegucigalpa,Honduras:1406;-8712", "Tokio,Japón:3542;13946", "Toronto,Canadá:4339;-7922", "Trípoli,Libia:3253;1317", "Ulan Bator,Mongolia:4755;10656", "Ushuaia,Argentina:-5448;-6818", "Vancouver,Canadá:4915;-12307", "Varsovia,Polonia:5214;2100", "Viena,Austria:4812;1623", "Vladivostok,Rusia:4308;13154", "Washington,EEUU:3854;-7702", "Yaoundé,Camerún:352;1131", "Zurich,Suiza:4723;832" }; private final String[] Ciudad = new String[datosCiud.length]; private final String[] Pais = new String[datosCiud.length]; private final int[] Latitud = new int[datosCiud.length]; private final int[] Longitud = new int[datosCiud.length]; private void MostrarMenuPrincipal() { setLayout(new GridLayout(0,1)); setFont(new Font("Helvetica", Font.PLAIN, 20)); add(new Label("MENÚ PRINCIPAL",Label.CENTER)); add(cb1); add(cb2); add(cb3); add(cb4); add(cb5); add(cb6); add(btnMenuPrincipal); validate(); EnMenuPrincipal = true; Pregunta = 0; } /* fin método MostrarMenuPrincipal */ private void LimpiarApplet() { removeAll(); EnMenuPrincipal = false; } /* fin método LimpiarApplet */ public boolean handleEvent(Event e) { if (e.id == Event.ACTION_EVENT && e.target == btnMenuPrincipal || e.key == Event.ENTER && EnMenuPrincipal) { if (cb1.getState()) { /* Comenzar con test tipo 1 (con países) */ ConPaises = true; IniciarTestTipo1(); } if (cb2.getState()) { /* Comenzar con test tipo 1 (sin países) */ ConPaises = false; IniciarTestTipo1(); } if (cb3.getState()) { /* Comenzar con test tipo 2 (con países) */ LimpiarApplet(); ConPaises = true; IniciarTestTipo2(); } if (cb4.getState()) { /* Comenzar con test tipo 2 (sin países) */ LimpiarApplet(); ConPaises = false; IniciarTestTipo2(); } if (cb5.getState()) { /* Ver listado de ciudades */ LimpiarApplet(); VerCiudades(); } if (cb6.getState()) { /* Averiguar distancia entre ciudades */ LimpiarApplet(); AveriguarDistancia(); } } if (e.id == Event.ACTION_EVENT && e.target == btnVerCiudades || (e.key == Event.ESCAPE && EnMenuPrincipal == false)) { LimpiarApplet(); MostrarMenuPrincipal(); } if (e.id == Event.ACTION_EVENT && e.target == btnAveriguarDistancia && Localidad1.getSelectedIndex() >= 0 && Localidad2.getSelectedIndex() >= 0) { Test1(true); } if (e.id == Event.ACTION_EVENT && e.target == btnSiguientePregunta) { if (Pregunta > 0 && Pregunta < 11) { if (test == 1) { Test1(false); } else { Test2(); } } else { LimpiarApplet(); MostrarMenuPrincipal(); } } if (e.target == textField && e.id == Event.KEY_PRESS) { if (e.key == Event.ENTER) { if (test == 1) { if (textField.getText().length() != 0) { KmJugador = Integer.parseInt(textField.getText()); Test1(true); } } else { /* test 2 */ if (textField.getText().length() == 4) { MostrarTablaTest2(textField.getText()); } } } if (e.key >= 48 && e.key <= 57) { if (test == 1) { if (textField.getText().length() == 6) { return true; } } else { /* test 2 */ if (e.key > 52 || e.key == 48 || textField.getText().indexOf(e.key-48+"") != -1) { return true; } } } else if (e.key >= 32) { return true; } } return super.handleEvent(e); } /* Fin método handleEvent */ public void init() { String s; CheckboxGroup cbg; int i,j,GraLat,MinLat,GraLon,MinLon; Localidad1 = new List(); Localidad2 = new List(); Localidad3 = new List(); for(i=0; i<datosCiud.length; i++) { s = datosCiud[i]; Ciudad[i] = s.substring(0, s.indexOf(",")); Pais[i] = s.substring(s.indexOf(",")+1, s.indexOf(":")); j = Integer.parseInt(s.substring(s.indexOf(":")+1, s.indexOf(";"))); GraLat = Math.abs(j) / 100; MinLat = Math.abs(j) % 100; Latitud[i] = 60 * (j/100) + (j%100); /* Convertir a minutos */ j = Integer.parseInt(s.substring(s.indexOf(";")+1, s.length())); GraLon = Math.abs(j) / 100; MinLon = Math.abs(j) % 100; Longitud[i] = 60 * (j/100) + (j%100); /* Convertir a minutos */ s = ObtenerCiudad(i, true); Localidad1.addItem(s); Localidad2.addItem(s); Localidad3.addItem((i+1) + ") " + s + ": "+ GraLat + "° " + MinLat + "' lat " + (Latitud[i] < 0?"S, ":"N, ") + GraLon + "° " + MinLon + "' long " + (Latitud[i] < 0?"O":"E")); } String s1 = "Comenzar con el test tipo 1"; String s2 = "Comenzar con el test tipo 2"; String s3 = " (con países)"; String s4 = " (sin países)"; cbg = new CheckboxGroup(); cb1 = new Checkbox(s1+s3, cbg, true); cb2 = new Checkbox(s1+s4, cbg, false); cb3 = new Checkbox(s2+s3, cbg, false); cb4 = new Checkbox(s2+s4, cbg, false); cb5 = new Checkbox("Ver el listado de ciudades", cbg, false); cb6 = new Checkbox("Averiguar la distancia entre ciudades", cbg, false); btnMenuPrincipal = new Button("Apriete aquí para seguir"); removeAll(); MostrarMenuPrincipal(); } /* fin método init */ private String ObtenerCiudad(int NumeroCiudad, boolean ConPaises) { if (ConPaises) { return Ciudad[NumeroCiudad]+" ("+Pais[NumeroCiudad]+")"; } else { return Ciudad[NumeroCiudad]; } } /* fin método ObtenerCiudad */ private void AveriguarDistancia() { gridbag = new GridBagLayout(); c = new GridBagConstraints(); btnAveriguarDistancia = new Button("Averiguar Distancia"); setLayout(gridbag); c.weightx = 1.0; c.gridwidth = GridBagConstraints.RELATIVE; /* Penúltimo en la fila */ c.fill = GridBagConstraints.BOTH; c.weighty = 1.0; gridbag.setConstraints(Localidad1, c); add(Localidad1); c.gridwidth = GridBagConstraints.REMAINDER; /* Ultimo en la fila */ gridbag.setConstraints(Localidad2, c); add(Localidad2); c.fill = GridBagConstraints.CENTER; c.weighty = 0.0; gridbag.setConstraints(btnAveriguarDistancia, c); add(btnAveriguarDistancia); validate(); } /* fin método AveriguarDistancia */ private void IniciarTestTipo1() { test = 1; Pregunta = 1; Puntos = 0; Test1(false); } /* fin método IniciarTestTipo1 */ private void IniciarTestTipo2() { test = 2; Pregunta = 1; Puntos = 0; Test2(); } /* fin método IniciarTestTipo2 */ private void VerCiudades() { gridbag = new GridBagLayout(); c = new GridBagConstraints(); btnVerCiudades = new Button("Apriete aquí para volver"); setLayout(gridbag); c.weightx = 1.0; c.gridwidth = GridBagConstraints.REMAINDER; /* Ultimo en la fila */ c.fill = GridBagConstraints.BOTH; c.weighty = 1.0; gridbag.setConstraints(Localidad3, c); add(Localidad3); c.fill = GridBagConstraints.CENTER; c.weighty = 0.0; gridbag.setConstraints(btnVerCiudades, c); add(btnVerCiudades); validate(); } /* fin método VerCiudades */ private void makeLabel(String Caption, Color color) { Label label = new Label(Caption); gridbag.setConstraints(label, c); add(label); label.setForeground(color); } /* fin método makeLabel */ private int Distancia(int Lat1, int Lon1, int Lat2, int Lon2) { float q = (float) (Math.cos(Lat1*Rad)*Math.cos(Lat2*Rad)*Math.cos((Lon1-Lon2)*Rad)+Math.sin(Lat1*Rad)*Math.sin(Lat2*Rad)); if (q >= 1) return 0; if (q < -1) return 20012; return (int)(Math.round(6370*Math.acos(q))); } /* fin método Distancia */ private String ObtenerRumbo(int Lat1, int Lon1, int Lat2, int Lon2) { int Angulo; int AngAux; float Diferencia; if (Lon1 == Lon2) Angulo = (Lat1>Lat2)?180:0; else { if (Lat1 == 90*60 || Lat2 == (float)(-90*60)) Angulo = 180; else { if (Lat1 == -90*60 || Lat2 == 90*60) Angulo = 0; else { Diferencia = Lon2 - Lon1; Angulo = 90 - (int)(Math.round(180/Math.PI*Math.atan((Math.tan(Lat2*Rad)*Math.cos(Lat1*Rad)-Math.sin(Lat1*Rad)*Math.cos(Diferencia*Rad))/Math.sin(Diferencia*Rad)))); Diferencia = (Diferencia + 360*60) % (360*60); if (Diferencia > 180*60) { Angulo = (Angulo + 180) % 360; } } } } AngAux = (Angulo + 348) % 360; return Angulo + " grado" + (Angulo==1?"":"s") + " (" + Rumbos[(int)Math.floor((float)AngAux/22.5)] + ")"; } /* fin método ObtenerRumbo */ private String HorasSol(int Lat, int Lon) { double q; int MinutosSol; if (Math.abs(Lat) == 90*60) q = Lat; else q = .4338 * Math.tan(Lat*Rad); if (q >= 1) MinutosSol = 0; else if (q <= -1) MinutosSol = 1440; else MinutosSol = (int)Math.round(458.3662*Math.acos(q)); return (int)(MinutosSol/60) + "h " + (MinutosSol%60) + "m"; } /* fin método HorasSol */ private void Test1(boolean Completo) { int Distcia; int PuntajeParcial; String Interpretacion; String Ci1, Ci2; int Lat1, Lat2, Lon1, Lon2; LimpiarApplet(); setFont(new Font("Helvetica", Font.PLAIN, 12)); gridbag = new GridBagLayout(); c = new GridBagConstraints(); c.gridwidth = GridBagConstraints.REMAINDER; /* Ultimo en la fila */ c.weightx = 1.0; c.fill = GridBagConstraints.BOTH; setLayout(gridbag); if (Pregunta != 0) { /* En test tipo 1 */ if (Completo == false) { /* Generar las ciudades */ Ciud1 = (int)Math.floor(Math.random()*datosCiud.length); do { Ciud2 = (int)Math.floor(Math.random()*datosCiud.length); } while (Ciud1 == Ciud2); setFont(new Font("Helvetica", Font.BOLD, 14)); makeLabel("Su puntaje actual es: "+Puntos+" punto"+(Puntos==1?"":"s"),Color.red); } } else { /* Distancia entre dos ciudades */ Ciud1 = Localidad1.getSelectedIndex(); Ciud2 = Localidad2.getSelectedIndex(); } Ci1 = ObtenerCiudad(Ciud1, ConPaises || Pregunta == 0); Ci2 = ObtenerCiudad(Ciud2, ConPaises || Pregunta == 0); Lat1 = Latitud[Ciud1]; Lon1 = Longitud[Ciud1]; Lat2 = Latitud[Ciud2]; Lon2 = Longitud[Ciud2]; if (Pregunta != 0) { makeLabel(Ordinal[Pregunta - 1]+" pregunta: ¿Cuál es la distancia entre las siguientes ciudades?", Color.black); } else { makeLabel("Las ciudades son:", Color.black); } makeLabel(Ci1+" y "+Ci2, Color.black); makeLabel(" ", Color.black); if (Completo == false) { c.weightx = 0.0; c.gridwidth = GridBagConstraints.RELATIVE; makeLabel("Distancia en kilómetros:", Color.black); c.gridwidth = GridBagConstraints.REMAINDER; c.gridheight = GridBagConstraints.REMAINDER; textField = new TextField(6); c.weightx = 1.0; c.fill = GridBagConstraints.NONE; gridbag.setConstraints(textField, c); add(textField); c.fill = GridBagConstraints.BOTH; } else { Distcia = Distancia(Lat1, Lon1, Lat2, Lon2); if (Pregunta != 0) { makeLabel("Según ud. la distancia es de "+KmJugador+" kilómetro"+(KmJugador==1?"":"s")+", pero en realidad es de "+Distcia+" kilómetro"+(Distcia==1?"":"s")+".", Color.red); } else { makeLabel("La distancia entre ambos lugares es de "+Distcia+" kilómetro"+(Distcia==1?"":"s")+".", Color.red); } makeLabel("Además le informo que:", Color.black); makeLabel("Para ir de "+ObtenerCiudad(Ciud1,false)+" a "+ObtenerCiudad(Ciud2,false)+": "+ObtenerRumbo(Lat1, Lon1, Lat2, Lon2), Color.black); makeLabel("Para ir de "+ObtenerCiudad(Ciud2,false)+" a "+ObtenerCiudad(Ciud1,false)+": "+ObtenerRumbo(Lat2, Lon2, Lat1, Lon1), Color.black); makeLabel("donde: 0º = norte; 90º = este; 180º = sur; 270º = oeste.", Color.black); c.gridwidth = GridBagConstraints.RELATIVE; makeLabel("Sol sobre el horizonte de " + Ci1 + ":", Color.black); c.gridwidth = GridBagConstraints.REMAINDER; makeLabel("Sol sobre el horizonte de " + Ci2 + ":", Color.black); c.gridwidth = GridBagConstraints.RELATIVE; makeLabel("El 21 de junio: "+HorasSol(-Lat1, Lon1), Color.black); c.gridwidth = GridBagConstraints.REMAINDER; makeLabel("El 21 de junio: "+HorasSol(-Lat2, Lon2), Color.black); c.gridwidth = GridBagConstraints.RELATIVE; makeLabel("El 21 de diciembre: "+HorasSol(Lat1, Lon1), Color.black); c.gridwidth = GridBagConstraints.REMAINDER; makeLabel("El 21 de diciembre: "+HorasSol(Lat2, Lon2), Color.black); if (Pregunta != 0) { PuntajeParcial = (int)Math.round(100 - 100 * Math.abs(Math.log((double)Distcia/(double)KmJugador))); if (PuntajeParcial < 0) PuntajeParcial = 0; if (PuntajeParcial == 100) Interpretacion = "¡impresionante!"; else if (PuntajeParcial > 94) Interpretacion = "¡excelente!"; else if (PuntajeParcial > 89) Interpretacion = "¡muy bien!"; else if (PuntajeParcial > 79) Interpretacion = "bien, che."; else if (PuntajeParcial > 69) Interpretacion = "No está mal: regular, bah"; else if (PuntajeParcial > 59) Interpretacion = "mmmm..."; else if (PuntajeParcial > 39) Interpretacion = "ay, ay, ay, ¡qué mediocre!"; else if (PuntajeParcial > 19) Interpretacion = "¡¡Yeeech!!"; else Interpretacion = "¡¡Puajjj!!"; Puntos += PuntajeParcial; makeLabel("Su puntaje en esta ronda es "+PuntajeParcial+" ("+Interpretacion+"), por lo tanto su puntaje "+(Pregunta==10?"final":"actual")+" es "+Puntos+".", Color.red); if (Pregunta == 10) { if (Puntos > 949) Interpretacion = "Aunque vaya en contra de mis principios, lo felicito."; else if (Puntos > 899) Interpretacion = "Casi perfecto. CASI. La próxima vez no le irá tan bien."; else if (Puntos > 799) Interpretacion = "Se podría decir que sabe del tema. Pero todavía le falta."; else if (Puntos > 699) Interpretacion = "Siga jugando, va por el buen camino."; else if (Puntos > 599) Interpretacion = "Evidentemente, le falta práctica (varios meses de práctica)."; else if (Puntos > 399) Interpretacion = "Parece que su fuerte no es la geografía."; else Interpretacion = "Me parece que ud. tendría que jugar al 'Doom'."; c.gridwidth = GridBagConstraints.RELATIVE; makeLabel(Interpretacion, Color.red); } Pregunta++; } BotonSiguientePregunta(); } validate(); if (Completo == false) { textField.requestFocus(); } else { btnSiguientePregunta.requestFocus(); } } /* fin método Test1 */ private void BotonSiguientePregunta() { c.gridwidth = GridBagConstraints.REMAINDER; c.fill = GridBagConstraints.NONE; btnSiguientePregunta = new Button((Pregunta>10 || Pregunta==0)?"Menú principal":"Siguiente pregunta"); gridbag.setConstraints(btnSiguientePregunta, c); add(btnSiguientePregunta); } /* fin método BotonSiguientePregunta */ private void Test2() { int j, k, azar; LimpiarApplet(); setFont(new Font("Helvetica", Font.PLAIN, 12)); gridbag = new GridBagLayout(); c = new GridBagConstraints(); c.gridwidth = GridBagConstraints.REMAINDER; /* Ultimo en la fila */ c.weightx = 1.0; c.fill = GridBagConstraints.BOTH; setLayout(gridbag); for (j=0; j<6; j++) { do { azar = (int)Math.floor(Math.random()*datosCiud.length); for (k=0; k<j; k++) { if (Ciud[k] == azar) break; } } while (k != j); Ciud[j] = azar; } setFont(new Font("Helvetica", Font.BOLD, 14)); makeLabel("Su puntaje actual es: "+Puntos+" punto"+(Puntos==1?"":"s"),Color.red); makeLabel(Ordinal[Pregunta - 1]+" pregunta: ¿En qué orden se debe pasar por las siguientes", Color.black); makeLabel("cuatro ciudades para lograr la mínima distancia partiendo de", Color.black); makeLabel(ObtenerCiudad(Ciud[0], ConPaises) + " y llegando a " + ObtenerCiudad(Ciud[5], ConPaises) + "?", Color.black); makeLabel(" ", Color.black); for (j=1; j<5; j++) { makeLabel(j + ") " + ObtenerCiudad(Ciud[j], ConPaises), Color.black); } makeLabel(" ", Color.black); c.weightx = 0.0; c.gridwidth = GridBagConstraints.RELATIVE; makeLabel("Ej.: Si cree que el orden es 1, 2, 3, 4, digite 1234", Color.black); c.gridwidth = GridBagConstraints.REMAINDER; c.gridheight = GridBagConstraints.REMAINDER; textField = new TextField(6); c.weightx = 1.0; c.fill = GridBagConstraints.NONE; gridbag.setConstraints(textField, c); add(textField); c.fill = GridBagConstraints.BOTH; validate(); textField.requestFocus(); } /* fin método Test2 */ private void MostrarTablaTest2(String orden) { int lugar, i, j, k, u, v; String combinacion; int[] arrayDist = new int[25]; int[] arrayDistComb = new int[24]; String[] arrayComb = new String[24]; List distancias; String temp; LimpiarApplet(); setFont(new Font("Helvetica", Font.PLAIN, 10)); gridbag = new GridBagLayout(); c = new GridBagConstraints(); c.gridwidth = GridBagConstraints.REMAINDER; /* Ultimo en la fila */ c.weightx = 1.0; c.weighty = 1.0; c.fill = GridBagConstraints.BOTH; setLayout(gridbag); i = 0; for (j=0; j<5; j++) { for (k=1; k<=5; k++) { arrayDist[i++] = Distancia(Latitud[Ciud[j]], Longitud[Ciud[j]], Latitud[Ciud[k]], Longitud[Ciud[k]]); } } for (j=0; j<24; j++) { arrayComb[j] = "123412431324134214231432213421432314234124132431312431423214324134123421412341324213423143124321".substring(j*4,j*4+4); combinacion = "0" + arrayComb[j] + "5"; arrayDistComb[j] = 0; for (k=0; k<5; k++) { u = Integer.parseInt(combinacion.substring(k,k+1)); v = Integer.parseInt(combinacion.substring(k+1,k+2)); arrayDistComb[j] += arrayDist[u*5+v-1]; } for (k=j; k>0; k--) { if (arrayDistComb[k] > arrayDistComb[k-1]) break; i = arrayDistComb[k]; arrayDistComb[k] = arrayDistComb[k-1]; arrayDistComb[k-1] = i; temp = arrayComb[k]; arrayComb[k] = arrayComb[k-1]; arrayComb[k-1] = temp; } } distancias = new List(); lugar = -1; setFont(new Font("Courier", Font.PLAIN, 12)); for (j=0; j<24; j++) { combinacion = arrayComb[j]; if (combinacion.compareTo(orden) == 0) { lugar = j; } distancias.addItem((lugar==j?"-> ":" ")+(j+1)+") "+ObtenerCiudad(Ciud[0], ConPaises)+" -> "+ ObtenerCiudad(Ciud[Integer.parseInt(combinacion.substring(0,1))], ConPaises)+" -> " + ObtenerCiudad(Ciud[Integer.parseInt(combinacion.substring(1,2))], ConPaises) + " -> "); distancias.addItem(" " + ObtenerCiudad(Ciud[Integer.parseInt(combinacion.substring(2,3))], ConPaises)+" -> "+ ObtenerCiudad(Ciud[Integer.parseInt(combinacion.substring(3,4))], ConPaises)+" -> "+ ObtenerCiudad(Ciud[5], ConPaises)+": "+ arrayDistComb[j] + " km (" + Math.round(100-100*j/23) + " puntos)"); if (j<23) distancias.addItem(" "); } gridbag.setConstraints(distancias, c); add(distancias); c.weighty = 0.0; i = Math.round(100-100*lugar/23); Puntos += i; makeLabel("Ud. eligió la opción " + (lugar+1) + " por lo que le corresponden " + i + " puntos.", Color.red); c.gridwidth = GridBagConstraints.RELATIVE; makeLabel("Su puntaje "+(Pregunta==10?"final":"actual")+" es "+Puntos+".", Color.red); Pregunta++; BotonSiguientePregunta(); validate(); distancias.makeVisible(lugar*3); } /* fin método MostrarTablaTest2 */ } /* fin clase Dist */ //