Foros del Web » Programación para mayores de 30 ;) » Java »

comparar enteros en un array

Estas en el tema de comparar enteros en un array en el foro de Java en Foros del Web. Hola, tengo que hacer un problema. Tengo una liga de 6 equipos y tengo que ordenador la clasificacion. Todos juegan contra el resto una vez ...
  #1 (permalink)  
Antiguo 25/10/2010, 02:35
 
Fecha de Ingreso: junio-2010
Mensajes: 44
Antigüedad: 14 años, 4 meses
Puntos: 0
comparar enteros en un array

Hola,

tengo que hacer un problema. Tengo una liga de 6 equipos y tengo que ordenador la clasificacion. Todos juegan contra el resto una vez solo, por lo que en total hay 15 partidos. Para que lo veias mas claro, suponiendo que los equipos son 1,2,3,4,5 y 6.
Los partidos que habran seran 1-2,1-3,1-4,1-5,1-6;2-3,2-4,2-5,2-6;3-4,3-5,3-6;4-5,4-6,5-6.

Por un lado llevo el contador de victorias, que a diferencia en el futbol, es lo que mas importa. El que mas victorias tenga, gana, el segundo que mas, segundo....etc, Y EN CASO DE TENER EMPATE A VICTORIAS, se miraran los puntos.

Asi pues, alguien me puede decir como hacer las comprobaciones? Porque estoy intentando hacerlo con if y else y es INFINITO EL CODIGO! Hasta ahora, intentaba hacer algo tal que asi:
Teniendo en cuenta de que v1= victorias del primera equipo; v2 = victorias del segundo equipo........v6= victorias del sexto equipo.
Y p1: puntos del primer equipo; p2=puntos del segundo equipo......p6=puntos del sexto equipo.

Ya tengo el metodo echo de como calcular las victorias y puntos, pero nose como hacer las MILLONES DE COMPARACIONES DE CASOS QUE SE PUEDEN DAR....
Código:
if( v1>v2 && v1>v3 && v1>v4 && v1>v5 && v1>v6){ //v1 es el que tiene mas victorias
jLabel1.setText(jtextfield1.getText()); //coloco en la primera posicion el nombre del ganador
if(v2>v3 && v2>4 && v2>v5 && v2>v6){//v2 es segundo
jLabel2.setText(jtextfield1.getText()); // coloco en la segunda posicion el nombre de segundo clasificado
}
}
Habia pensado en meter todas las victorias en un array y luego ir comparando pero no se como....alguien me puede dar alguna idea?

Gracias!
  #2 (permalink)  
Antiguo 25/10/2010, 09:36
 
Fecha de Ingreso: octubre-2010
Mensajes: 46
Antigüedad: 14 años, 1 mes
Puntos: 1
Respuesta: comparar enteros en un array

Hola que tal, mira, es buena tu idea, puedes meter tanto las victorias como los puntos en dos arreglos. y despues compararlos, y esto lo puedes hacer mediante un ciclo for. Con esto te facilita las muchas comparaciones que tienes que hacer, ya que vas comparando el primero con el segundo, tercero, ... sexto, y si les gano a todos, ya rompes el ciclo, por que el es el mayor. Si no fue, pasas con el segundo y asi consecutivamente. Cuando sean iguales las victorias, comparas los puntos de esos equipos y dependiendo del que gane, sera el mayor hasta el momento. Mira te dejo esto, espero te ayude sale?

package futbol;

import java.util.*;


public class futbol {

int []Victorias = new int[6];
int [] Puntos=new int[6];

public int[] addVictorias()
{
Victorias[0]=1;
Victorias[1]=2;
Victorias[2]=3;
Victorias[3]=4;
Victorias[4]=15;
Victorias[5]=15;
return Victorias;
}

public int[] addPuntos()
{
Puntos[0]=4;
Puntos[1]=5;
Puntos[2]=8;
Puntos[3]=10;
Puntos[4]=16;
Puntos[5]=9;

return Puntos;
}


public static void main(String[] args) {
futbol partido=new futbol();
//creamos los arreglos de puntos y victorias
int []V = new int[6];
int []P = new int[6];
//llamamos los metodos de la clase que permiten sumar puntos y victorias
V=partido.addVictorias();
P=partido.addPuntos();
//variable que determina cual es el mayor
int candado=0;
//variable que guarda cual es el mayor
int mayor=0;
//empezamos a comparar equipo por equipo
for(int x=0;x<6;x++)
{
candado=0;
for(int y=0;y<6;y++)
{
//No puede comparar con si mismo
if(x!=y)
{
// si el equipo x tiene mas victorias que y
if (V[x]>V[y])
{
//si esta variable llega a 5, significa que el equipo x les gano a todos
//por lo tanto es el mayor
candado++;
}
else if(V[x]==V[y])
{
//si los puntos de x son mayores que y
if(P[x]>P[y])
{
candado++;
}
//si no rompemos bucle de , por que no tiene caso seguir comparando
//ya que e smenor
else
{
y=7;
}
}
else
{
//si no tiene mas victorias, no es el mayorpara romper el ciclo de y
//por lo tabto rompemos ciclo por que no tiene caso seguir comparando
y=7;
}
}
}
if(candado==5)
{
//significa que el equipo x es mas grande que todos
//rompemos bucle con x=7, por que al ser el mayor, ya nadie le gana
//y almacenamos el equipo en la variable mayor, pero recordamo que en los
//arreglos empezamos por 0, asi que para imprimer que equipo gano, seria
//conveniente escribir mayor +1, como se muestra a continuacion

mayor=x;
x=7;

}
}
System.out.println("El equipo con "+V[mayor]+" victorias y con "+P[mayor]+" puntos es el equipo "+(mayor+1));
// para el codigo, es el equipo 4, por que existe un equipo 0, pero realmente el ganador es el 5
}

Te lo dejo comentado, cualquier duda avisame. No se como determinas las victorias y puntos de cada uno, aqui lo hago d euna manera muy sencilla, seria cuestion de que lo adaptaras para como lo manejes tu.

Cuidate, saludos !!
  #3 (permalink)  
Antiguo 25/10/2010, 15:35
 
Fecha de Ingreso: junio-2010
Mensajes: 44
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: comparar enteros en un array

Increible aportacion RyoAkiyama. Muchas muchas gracias

Desde luego que me va a ayudar. Pero aun no tengo claro una cosa....ese codigo me serviria para saber el ganador(por victorias, o en caso de empate, por puntos).
Pero yo necesito saber las victorias y puntos de todos para ordenar la clasificacion.
Y claro, puede darse el caso de que:
-Hay un ganador y este será primero en la clasificacion que con lo que me has dado lo hago.
-El segundo y tercero esten empatados a puntos y victorias
-El cuarto y quinto esten empatados a victorias pero por puntos se pone a uno cuarto y al otro quinto
-Y luego el sexto.

Esta posibilidad es solo un ejemplo. Hay muchas combianaciones, ya que puede haber tambien un triple empate a victorias y puntos....etc.

Para que te hagas una idea, tengo una liga echa de solo 3 participantes.Te pongo parte del codigo porque entero es muy largo, pero asi te haces una idea.
Los puntos, los cojo de un comboBox. Son como combates de boxeo, entonces a cada participante se le adjudica unos puntos, que se cogen de un comboBox.

Luego, alfinal, esos puntos y victorias se los paso a un metodo para ordenar la clasificacion, que seria hacer lo que tu me has puesto:


Código:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        int indice1 = this.jComboBox1.getSelectedIndex();
        int indice2 = this.jComboBox2.getSelectedIndex();
        int indice3 = this.jComboBox3.getSelectedIndex();
        int indice4 = this.jComboBox4.getSelectedIndex();
        int indice5 = this.jComboBox5.getSelectedIndex();
        int indice6 = this.jComboBox6.getSelectedIndex();
        int contador_uno_puntos = 0;
        int contador_dos_puntos = 0;
        int contador_tres_puntos = 0;
        int contador_uno_victorias = 0;
        int contador_dos_victorias = 0;
        int contador_tres_victorias = 0;

        /***************PRIMER PARTIDO, 1-2*******************/

            if(indice1<indice3){  
                contador_uno_victorias++;             
            }else{
                if(indice1>indice3){
                    contador_dos_victorias++;
                }else{
                }
            }
            
        
        if(indice1==0) contador_uno_puntos += 10;
        else{
            if(indice1==1) contador_uno_puntos += 7;
            else{
                if(indice1==2) contador_uno_puntos += 5;
                else{
                    if(indice1==3) contador_uno_puntos += 3;
                    else{
                        if(indice1==4) contador_uno_puntos += 1;
                        else{
                            if(indice1==5 || indice1==6) contador_uno_puntos += 0;
                        }
                    }
                }
            }
        }
        if(indice3==0) contador_dos_puntos += 10;
        else{
            if(indice3==1) contador_dos_puntos += 7;
            else{
                if(indice3==2) contador_dos_puntos += 5;
                else{
                    if(indice3==3) contador_dos_puntos += 3;
                    else{
                        if(indice3==4) contador_dos_puntos += 1;
                        else{
                            if(indice3==5 || indice3==6) contador_dos_puntos += 0;
                        }
                    }
                }
            }
        }
        //}//primer else primer partido

        /***************SEGUNDO PARTIDO, 2-3*******************/
            if(indice4<indice6){   //CUANDO PASE LOS PARAMETROS AL METODO, PASAR TAMBIEN LOS DE EL C3.
                contador_dos_victorias++;
            }else{
                if(indice4>indice6){
                    contador_tres_victorias++;
                }else{
                }
            }
        if(indice4==0) contador_dos_puntos += 10;
        else{
            if(indice4==1) contador_dos_puntos += 7;
            else{
                if(indice4==2) contador_dos_puntos += 5;
                else{
                    if(indice4==3) contador_dos_puntos += 3;
                    else{
                        if(indice4==4) contador_dos_puntos += 1;
                        else{
                            if(indice4==5 || indice4==6) contador_dos_puntos += 0;
                        }
                    }
                }
            }
        }
        if(indice6==0) contador_tres_puntos += 10;
        else{
            if(indice6==1) contador_tres_puntos += 7;
            else{
                if(indice6==2) contador_tres_puntos += 5;
                else{
                    if(indice6==3) contador_tres_puntos += 3;
                    else{
                        if(indice6==4) contador_tres_puntos += 1;
                        else{
                            if(indice6==5 || indice6==6) contador_tres_puntos += 0;
                        }
                    }
                }
            }
        }

etcetera.....
....
...


ordenar_clasificacion(contador_uno_puntos, contador_dos_puntos, contador_tres_puntos, contador_uno_victorias, contador_dos_victorias, contador_tres_victorias);
Y aqui te pongo como ordeno yo la clasificacion: jlabel 19 es donde va el primero de la clasificacion, jLabel20 el segundo y jLabel21 el tercero. Y en los jLabels27...28...coloco las victorias y puntos. Mira la imagen:

[URL="http://www.imaxenes.com/imagen/liga31pi50iy.jpg.html"][/URL]

Y el codigo de ordenadar clasificacion:

Código:
public void ordenar_clasificacion(int contador_uno_puntos, int contador_dos_puntos, int contador_tres_puntos, int contador_uno_victorias, int contador_dos_victorias, int contador_tres_victorias){
        if((contador_uno_victorias > contador_dos_victorias) && (contador_uno_victorias > contador_tres_victorias)){ //GANA 1
            jLabel19.setText(jTextField1.getText());
            jLabel26.setText(contador_uno_puntos+"");
            jLabel29.setText(contador_uno_victorias+"");
            if(contador_dos_victorias > contador_tres_victorias){//segundo el 2 y tercero 3
                jLabel20.setText(jTextField2.getText());
                jLabel27.setText(contador_dos_puntos+"");
                jLabel30.setText(contador_dos_victorias+"");
                jLabel21.setText(jTextField3.getText());
                jLabel28.setText(contador_tres_puntos+"");
                jLabel31.setText(contador_tres_victorias+"");
            }
            else{
                if(contador_tres_victorias>contador_dos_victorias){ //segundo el 3 y tercero el 2
                    jLabel20.setText(jTextField3.getText());
                    jLabel27.setText(contador_tres_puntos+"");
                    jLabel30.setText(contador_tres_victorias+"");
                    jLabel21.setText(jTextField2.getText());
                    jLabel28.setText(contador_dos_puntos+"");
                    jLabel31.setText(contador_dos_victorias+"");
                }
                else{//MIRAMOS PUNTOS PORQUE HAY EMPATE ENTRE LOS 2 Y 3
                    if(contador_dos_puntos>contador_tres_puntos){ //segundo 2 y tercero 3
                        jLabel20.setText(jTextField2.getText());
                        jLabel27.setText(contador_dos_puntos+"");
                        jLabel30.setText(contador_dos_victorias+"");
                        jLabel21.setText(jTextField3.getText());
                        jLabel28.setText(contador_tres_puntos+"");
                        jLabel31.setText(contador_tres_victorias+"");
                    }else{
                        if(contador_tres_puntos>contador_dos_puntos){ //segundo 3 y tercero 2
                            jLabel20.setText(jTextField3.getText());
                            jLabel27.setText(contador_tres_puntos+"");
                            jLabel30.setText(contador_tres_victorias+"");
                            jLabel21.setText(jTextField2.getText());
                            jLabel28.setText(contador_dos_puntos+"");
                            jLabel31.setText(contador_dos_victorias+"");
                        }else{ //empate
                            jLabel20.setText(jTextField2.getText());
                            jLabel27.setText(contador_dos_puntos+"");
                            jLabel30.setText(contador_dos_victorias+"");
                            jLabel21.setText(jTextField3.getText());
                            jLabel28.setText(contador_tres_puntos+"");
                            jLabel31.setText(contador_tres_victorias+"");
                            JOptionPane.showMessageDialog(rootPane, "Hay un empate a victorias y puntos entre 2 participantes.", "EMPATE A VICTORIAS Y PUNTOS", JOptionPane.ERROR_MESSAGE);
                        }
                    }
                }
            }
        }
        else{//AHORA COMPROBADO SEGUNDO CASO,C2>C1YC3
.......
........
.......
......


Imaginate lo largo que es....y eso que aun falta codigo y es solo la liga de 3.
Por eso la liga de 6 me parecia IMPOSIBLE hacerlo asi.

Un saludo y a ver si me puedes ayudar con lo que te digo, el "colocar" a todos, no solo el ganador.

GRACIAS!

Última edición por porito; 25/10/2010 a las 15:41
  #4 (permalink)  
Antiguo 27/10/2010, 09:21
 
Fecha de Ingreso: octubre-2010
Mensajes: 46
Antigüedad: 14 años, 1 mes
Puntos: 1
Respuesta: comparar enteros en un array

Estuve leyendo tu codigo, pero por desgracia aca donde ando no puedo ver la imagen. No habria otra forma de que me la pudieras pasar?

Volviendo al codigo, quisiera saber como tienes tus combo box, que elementos posee cada una y que simbolizan las variables indice1, indice2,...,indice6. Cada uno de estos valores los obtienes de una combo, y luego los comparas, pero no se si simbolizan victorias, o puntos o ambas

if(indice1<indice3){
contador_uno_victorias++;
}else{
if(indice1>indice3){
contador_dos_victorias++;
}else{
}
}

Pero aqui no entiendo bien por que si indice1>indice3 gana el 2, y luego la determinacion de los puntos no como la haces, me imagino que en la imagen que me mostraste y que no puedo ver debe de venir todo esto, pero no se si me podrias explicar un poco mas a fondo tu codigo, para poder entenderle mejor.

Saludos, que tengas buen dia
  #5 (permalink)  
Antiguo 27/10/2010, 09:50
 
Fecha de Ingreso: junio-2010
Mensajes: 44
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: comparar enteros en un array

Ok, te intentare explicar por aqui como es la imagen para que te hagas una idea.
Aun asi, intenta entrar en este enlace que te lleva a la misma imagen:

http://piczasso.com/i/4v3fx.jpg

edito: no me deja hacer click en la URL, pero si la copias y la pegas en un barra de direcciones te carga la pagina con la imagen.

La imagen es de la liga de 3. Entonces imaginate, hay 3 participantes:
1-Porito
2-Ryo
3-Ricardo

La liga tendra 3 partidos puesto que todos pelean contra todos 1 sola vez. Solo partido de "ida". Asi pues, los partidos sera: 1 vs 2, 1 vs 3 y 2 vs 3.

Los jcomboBox son para elegir el resultado de cada equipo, asique tengo un jcomboBox para poner el resultado de Porito en el partido contra Ryo. Otro combo para poner la puntuacion de Porito contra Ricardo, otro para la puntuacion de Ryo contra porito, otro para contra ricardo y 2 combos para ricardo contra porito y ryo. Asi pues, en la liga de 3 tengo 6 jComboBox

Por eso hay 6 indices:
Cita:
int indice1 = this.jComboBox1.getSelectedIndex();
int indice2 = this.jComboBox2.getSelectedIndex();
int indice3 = this.jComboBox3.getSelectedIndex();
int indice4 = this.jComboBox4.getSelectedIndex();
int indice5 = this.jComboBox5.getSelectedIndex();
int indice6 = this.jComboBox6.getSelectedIndex();

Para coger el indice(PUNTUACION) de cada comboBox. Dentro de cada jcombobox tengo los siguientes valores: 10, 7, 5, 3, 1, 0, N/D.

De tal forma que si el valor elegido es 10 puntos, es indice = 0 puesto que el 10 esta en la posicion cero, el 7 en la 1....y el N/D en la 6.
Por eso hago lo de "indice1>indice3 gana el 2" porque si el indice3 es mas pequeño, quiere decir que el valor elegido es mas grande



Si Ryo tiene 7 puntos en su indice3, el indice sera 1, y si Porito tiene 3 puntos en su indice1, el indice sera 3 y como indice1>indice3 ----> 7puntos(indice3) > 3puntos(indice1)....

Parece un poco lioso pero es facil, lo que pasa que por aqui entiendo que cueste. Si logras ver la imagen entenderas. Digamos que hay esto

Código:
           1              2                    3
1         -         comboBox1           comboBox2


2      combobox3        -               comboBox4


3     comboBox5      comboBox6             -

int indice1 = this.jComboBox1.getSelectedIndex();
...
...


Por eso si indice1>indice3 gana el 2, por lo que aumento en 1 el contador de victorias del participante 2, y me guardo el valor de puntos en un contador de puntos:

Código:
if(indice1==0) contador_uno_puntos += 10;
        else{
            if(indice1==1) contador_uno_puntos += 7;
            else{
                if(indice1==2) contador_uno_puntos += 5;
                else{
                    if(indice1==3) contador_uno_puntos += 3;
                    else{
                        if(indice1==4) contador_uno_puntos += 1;
                        else{
                            if(indice1==5 || indice1==6) contador_uno_puntos += 0;
Si sigues sin ver la imagen, si quieres me mandas por privado tu email y te la mando al correo.

Un saludo y espero haberme explicado mejor


pd:esta liga de 3 ya la tengo echa....pero como te dije, para hacerla con 6 de la forma que lo hago es imposible. Cientos de comparaciones tendria que hacer....

Última edición por porito; 27/10/2010 a las 09:56
  #6 (permalink)  
Antiguo 28/10/2010, 03:39
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 16 años, 2 meses
Puntos: 188
Respuesta: comparar enteros en un array

El hecho es que se deberian tener los resultados ordenados por numero de victorias y solo realizar las comparaciones con puntos cuando estas coinciden entre 2 o más consecutivas.

Así lo tendrías más fácil .. comparas.. coincide? no.. pasas al siguiente, coincide, si, comparas con el siguiente, coincide, tb... siguiente no coincide, pues cortas y comparas a puntos esos 3 que han coincidido, una vez acabes vuelves a comparar a partir del elemento que no coincidia. Reduces mucho las comparaciones, a apenas tres bucles.
  #7 (permalink)  
Antiguo 05/11/2010, 09:31
 
Fecha de Ingreso: junio-2010
Mensajes: 44
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: comparar enteros en un array

Cita:
Iniciado por Fuzzylog Ver Mensaje
El hecho es que se deberian tener los resultados ordenados por numero de victorias y solo realizar las comparaciones con puntos cuando estas coinciden entre 2 o más consecutivas.

Así lo tendrías más fácil .. comparas.. coincide? no.. pasas al siguiente, coincide, si, comparas con el siguiente, coincide, tb... siguiente no coincide, pues cortas y comparas a puntos esos 3 que han coincidido, una vez acabes vuelves a comparar a partir del elemento que no coincidia. Reduces mucho las comparaciones, a apenas tres bucles.
Disculpar la tardanza en contestar, pero he tenido problemas estas 2 semanas y no podia ponerme con esto.

Fuzzylog, no te he entendido muy bien cuando dices lo de:

Cita:
Así lo tendrías más fácil .. comparas.. coincide? no.. pasas al siguiente, coincide, si, comparas con el siguiente, coincide, tb... siguiente no coincide, pues cortas y comparas a puntos esos 3 que han coincidido, una vez acabes vuelves a comparar a partir del elemento que no coincidia. Reduces mucho las comparaciones, a apenas tres bucles
Te refieres a tenerlos ordenados en un array o como?

Menudo lio llevo.

A ver si RyoAkiyama puedo tambien echarme un cable porque el codigo que puso me gustó pero solo me sirve para saber 1 ganador, y necesito ordenar la clasificacion por lo que tengo que "guardarme" el orden de todos....

  #8 (permalink)  
Antiguo 05/11/2010, 09:44
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 21 años, 1 mes
Puntos: 51
Respuesta: comparar enteros en un array

Lo más "sencillo y elegante" sería mantener un conjunto ordenado (sorted Collection) y que se ordenaran segun el Comparator que le pasas al crear la colección. De esta forma el problema se reduce a comparar dos elementos, la operación del Comparator, y el conjunto ordenado es que el que se preocupa de hacer todas las comparaciones necesarias entre todos los elementos.

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #9 (permalink)  
Antiguo 05/11/2010, 10:44
 
Fecha de Ingreso: junio-2010
Mensajes: 44
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: comparar enteros en un array

Gracias por la aportacion GreenEyed pero me parece que aun me queda mucho por aprender porque no te he entendido

He probado el codigo que me puso RyoAkiyama hace tiempo, pero para una liga de 4 y me funciona a la perfeccion pero tiene una pega.

Si en la liga solo ha habido un partido, y han quedado 10 a 10, el contador de victorias de todos es 0 y el de puntos, estan empatados esos 2 equipos.
Entonces, esta claro que la liga ahi no va a terminar, pero tendria que mostrar un mensaje de EMPATE. Como hago eso en mi codigo?

Porque tal y como lo tengo me pone el ganador, y en este caso me dice que es el equipo1 pero porque maximo=0 al principio y me muestra maximo+1 por defecto, pero en verdad hay empate a victorias(0) y puntos(10)

Código:
public void metodo2(){
        int candado = 0;//DETERMINA CUAL ES EL MAYOR
        int maximo = 0; //SE GUARDA EL MAYOR
        for(int x =0; x<4;x++){//for x=0 a 6 comparamos equipo con equipo
            candado=0;
            for(int y=0;y<4;y++){
                //No puede comparar con si mismo
                if(x!=y){
                    // si el equipo x tiene mas victorias que y
                    if(victoriasdetodos.get(x)>victoriasdetodos.get(y)){
                    //si esta variable llega a 3, significa que el equipo x les gano a todos por lo tanto es el mayor
                        candado++;
                    }else{
                        if(victoriasdetodos.get(x)==victoriasdetodos.get(y)){
                            //si los puntos de x son mayores que y
                            if(puntosdetodos.get(x)>puntosdetodos.get(y)){
                                candado++;
                            }else{//si no rompemos bucle de , por que no tiene caso seguir comparando ya que es menor
                                y=5;
                            }
                        }else{
                            y=5;
                        }
                    }
                }
            }
//significa que el equipo x es mas grande que todos rompemos bucle con x=7, 
//por que al ser el mayor, ya nadie le gana
 //y almacenamos el equipo en la variable mayor, pero recordamo que en los
//arreglos empezamos por 0, asi que para imprimer que equipo gano, seria
//conveniente escribir mayor +1, como se muestra a continuacion
                if(candado==3){
                    maximo = x;
                    x=5;
                }
            }
            
        System.out.println(maximo+1);
    }

Luego, para el problema de ORDENAR la clasificacion, habia pensado en que cuando tenga un GANADOR en la liga, guardarlo en el jtextfield de la posicion 1 de la liga, Y ELIMINAR ESE ELEMENTO DEL ARRAY y volver a ejecutar ese metodo pero en vez de con 4, con 3, y el que gane sera el segundo...y asi sucesivamente.

El problema es que puede aver un empate entre los 2 primeros....o un empate entre el segundo y tercero....y cuando digo empate digo empate a VICTORIAS Y PUNTOS....

Y ahi ya no se como controlarlo...
  #10 (permalink)  
Antiguo 05/11/2010, 12:15
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 21 años, 1 mes
Puntos: 51
Respuesta: comparar enteros en un array

Hola,
Puedes ver algo de teoría y código aquí: http://www.javahispano.org/contenido...es_de_objetos/

La idea es la siguiente. En Java tu puedes definir una Collection que sea ordenada (en tu caso lo más ajustado parece un TreeSet) y puedes definir tu el orden pasandole al TreeSet un objeto del tipo Comparator, que implemente un método compareTo() en el cual tu comparas un objeto con otro, de la clase que sabes que vas a meter en el TreeSet, según las reglas que te convenga. La ventaja es que en este caso sólo has de comparar dos objetos.

Después simplemente vas añadiendo objetos al TreeSet y cuando has acabado, puedes sacarlos ordenados sin más. Están ordenados "solitos".

Si buscas "java comparator" en Google encontraras más ejemplos, el javadoc etc.

S!

PD: El problema de "empate" no es cuestión de código, es cuestión de definir bien cual es el resultado que quieres obtener en cualquiera de las combinaciones posibles. Luego implementarlo es lo fácil.
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #11 (permalink)  
Antiguo 02/06/2012, 10:52
 
Fecha de Ingreso: junio-2012
Mensajes: 3
Antigüedad: 12 años, 5 meses
Puntos: 0
Respuesta: comparar enteros en un array

Cita:
Iniciado por GreenEyed Ver Mensaje
Hola,
Puedes ver algo de teoría y código aquí: [url]http://www.javahispano.org/contenidos/es/como_ordenar_colecciones_de_objetos/[/url]

La idea es la siguiente. En Java tu puedes definir una Collection que sea ordenada (en tu caso lo más ajustado parece un TreeSet) y puedes definir tu el orden pasandole al TreeSet un objeto del tipo Comparator, que implemente un método compareTo() en el cual tu comparas un objeto con otro, de la clase que sabes que vas a meter en el TreeSet, según las reglas que te convenga. La ventaja es que en este caso sólo has de comparar dos objetos.

Después simplemente vas añadiendo objetos al TreeSet y cuando has acabado, puedes sacarlos ordenados sin más. Están ordenados "solitos".

Si buscas "java comparator" en Google encontraras más ejemplos, el javadoc etc.

S!

PD: El problema de "empate" no es cuestión de código, es cuestión de definir bien cual es el resultado que quieres obtener en cualquiera de las combinaciones posibles. Luego implementarlo es lo fácil.
Hola, lo primero siento resucitar este hilo pero no he encontrado nada que me sirva por internet.

Estoy creando una tabla de clasificación para un torneo de Baloncesto, y estoy utilizando los criterios de desempate de la ACB http://www.acb.com/redaccion.php?id=30992 .

Estoy utilizando el Comparator de java que comentaba GreenEyed, y todo bien, pero el problema viene que el Comparator compara dos objetos y no se como debo actuar para triples(o más) empates.

Aqui os dejo el código de mi Comparator:
Código:
package com.proyecto.util.listas;
import java.util.Comparator;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

import com.proyecto.dominio.Torneo;
import com.proyecto.dominio.User;
import com.proyecto.dominio.UserTorneo;
import com.proyecto.dominio.PartidoIndividualVersus;

// Hay que tener en cuenta que ordena de menor a mayor por lo que para ordenarlo de mayor a menor tenemos que poner ut2 antes

// Está hecho, pero solo para 2 equipos, no se como se hace para más (de momento).

public class ACBUserTorneoComparator implements Comparator<UserTorneo>{

	public int compare(UserTorneo ut1, UserTorneo ut2){
		
		if(ut2.getPartidosGanados() - ut1.getPartidosGanados()!=0){ // Mayor nº de victorias
			return ut2.getPartidosGanados() - ut1.getPartidosGanados();
		}
		else if(ut1.getPartidosJugados() - ut2.getPartidosJugados()!=0){ // Menor nº de partidos jugados
			return ut1.getPartidosJugados() - ut2.getPartidosJugados();
		}

			else{
				Torneo tor = ut1.getId().getParentTorneo();
				User us1 = ut1.getId().getParentUser();
				User us2 = ut2.getId().getParentUser();
				int rondas = tor.getRondas();
				int enfrentamientos = 0;
				
				Set<PartidoIndividualVersus> partidoSet = tor.getPartidosIndVersus();				
				Set<PartidoIndividualVersus> partidoSetVS = new HashSet<PartidoIndividualVersus>(); // Util para cuando hayan enfrentado todo
				
				Iterator<PartidoIndividualVersus> it = partidoSet.iterator();
				while(it.hasNext()){
					PartidoIndividualVersus pi = it.next();
					
					if(pi.getConfirmado()){
						if((pi.getParentLocal().equals(us1) && // Si se enfrentan los ut1 y ut2
								pi.getParentVisitante().equals(us2)) ||
								(pi.getParentLocal().equals(us2) &&
								pi.getParentVisitante().equals(us1))){
							
							enfrentamientos++;
							partidoSetVS.add(pi);
						}
					}
				}
				
				if(enfrentamientos < rondas){ // Si no se han enfrentado todas las veces
					return AverageFavorCocienteGlobal(ut1,ut2);
				}
				
				else{ // Si ya se han enfrentado todas las veces
					int victoriasUT1 = 0;
					int victoriasUT2 = 0;
					int favorUT1 = 0; // En el average entre 2 no hace falta saber los ptos en contra
					int favorUT2 = 0;
					
					it = partidoSetVS.iterator();
					while(it.hasNext()){
						PartidoIndividualVersus pi = it.next();
						
						if(pi.getParentGanador().equals(us1)){
							victoriasUT1++;
						}
						else if(pi.getParentGanador().equals(us2)){ // No haria falta el if pero de momento lo dejamos asi
							victoriasUT2++;
						}
						
						if(pi.getParentLocal().equals(us1)){
							favorUT1 += pi.getPuntosLocal();
							favorUT2 += pi.getPuntosVisitante();
						}
						else{
							favorUT2 += pi.getPuntosLocal();
							favorUT1 += pi.getPuntosVisitante();
						}
					}
					
					if(victoriasUT2 - victoriasUT1 != 0){ // Enfrentamiento Directo
						return victoriasUT2 - victoriasUT1;				
					}
					else if(favorUT2 - favorUT1 != 0){ // Average Directo
							return favorUT2 - favorUT1;				
						}
						else{
							return AverageFavorCocienteGlobal(ut1,ut2);
						}			
				}
			}		
	}
	

	int AverageFavorCocienteGlobal(UserTorneo ut1,UserTorneo ut2){
		if((ut2.getTantosFavor() - ut2.getTantosContra()) - (ut1.getTantosFavor()-ut1.getTantosContra())!= 0){ // Average global
			return (ut2.getTantosFavor() - ut2.getTantosContra()) - (ut1.getTantosFavor()-ut1.getTantosContra());
		}
		else if(ut2.getTantosFavor() - ut1.getTantosFavor() != 0){ // Tantos a Favor global
				return ut2.getTantosFavor() - ut1.getTantosFavor();
			}
			else{ // Cociente global
				return (ut2.getTantosFavor()/ut2.getTantosContra()) - (ut1.getTantosFavor()/ut1.getTantosContra());
			}
	}

}
Faltaria por implementar el criterio de desempate cuando son más de 2 equipos que sería:
  1. Número de victorias en enfrentamientos directos (seguir repitiendo para los que sigan empatados)
  2. Average directo
  3. Tantos a favor en enfrentamientos directos
  4. Average global
  5. Tantos a favor global
  6. Cociente global
  #12 (permalink)  
Antiguo 03/06/2012, 04:28
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años, 6 meses
Puntos: 306
Respuesta: comparar enteros en un array

No veo que exista un problema, las condiciones que has puesto no son aplicables a una comparación a tres, es una comparación entre dos.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #13 (permalink)  
Antiguo 04/06/2012, 12:32
 
Fecha de Ingreso: junio-2012
Mensajes: 3
Antigüedad: 12 años, 5 meses
Puntos: 0
Respuesta: comparar enteros en un array

Cita:
Iniciado por Xerelo Ver Mensaje
No veo que exista un problema, las condiciones que has puesto no son aplicables a una comparación a tres, es una comparación entre dos.
Faltaria por implementar el criterio de desempate cuando son más de 2 equipos que sería:
  1. Número de victorias en enfrentamientos directos (seguir repitiendo para los que sigan empatados)
  2. Average directo
  3. Tantos a favor en enfrentamientos directos
  4. Average global
  5. Tantos a favor global
  6. Cociente global


Esto es lo que no tengo implementado.
  #14 (permalink)  
Antiguo 04/06/2012, 12:48
 
Fecha de Ingreso: junio-2012
Mensajes: 3
Antigüedad: 12 años, 5 meses
Puntos: 0
Respuesta: comparar enteros en un array

Por si no se entiende pongo un ejemplo para el caso de que estén mas de 2 equipos empatados a victorias (teniendo los mismos partidos jugados y habiendose enfrentado ya todas las veces):

  1. Real Madrid 30 victorias 8 derrotas
  2. Barcelona 27 v 11 derrotas
  3. Baskonia 27 v 11 d
  4. Gran Canaria 27v 11d

Imaginemos que el Barcelona ganó a Baskonia y Gran Canaria, y a su vez Gran Canaria ganó Baskonia. El desempate quedaría asi
  1. Barcelona 2v 0d
  2. Gran Canaria 1v 1d
  3. Baskonia 0v 2d


Clasificación final:
  1. Real Madrid 30 victorias 8 derrotas
  2. Barcelona 27 v 11 derrotas
  3. Gran Canaria 27 v 11 d
  4. Baskonia 27v 11d

Etiquetas: comparar, enteros
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:58.