Foros del Web » Programando para Internet » Android »

Calendario de liga.

Estas en el tema de Calendario de liga. en el foro de Android en Foros del Web. Hola chicos tengo un problema la, estoy haciendo un calendario de liga y lo que me sucede es que me salen todos los enparejamientos ok, ...
  #1 (permalink)  
Antiguo 14/04/2013, 09:08
Usuario no validado
 
Fecha de Ingreso: abril-2012
Mensajes: 134
Antigüedad: 12 años, 1 mes
Puntos: 0
Calendario de liga.

Hola chicos tengo un problema la, estoy haciendo un calendario de liga y lo que me sucede es que me salen todos los enparejamientos ok, pero se dan casos en que equipos juegan dos veces dentro y dos o dos fuera, solo sucede con algunos equipos otros quedan de lujo, he estado buscando algoritmos de "todos contra todos", round robin... etc, pero no soy capaz de cuadrarlos para que salgan ok.

os dejo el codigo a ver si veis algo raro o una mejor manera de hacerlo.

me estoy basando en esto

Código:
Teniendo un numero "x" de equipos por ejemplo 6, lo que hago disponerlos de la siguiente manera considerando a la cantidad de equipos menos 1, es decir los equipos desde el 1 hasta el 5.

1   2   3
4   5   1
2   3   4
5   1   2
3   4   5

La cantidad de columnas me lo indica la cantidad de equipos divida en dos. En este caso 3 columnas si considero 6 equipos.
La cantidad de filas me lo determina la cantidad de equipos menos uno. Para el ejemplo, 5 filas.

Ahora a la primer columna le agrego el equipo restante que seria el equipo numero 6. Entonces quedaria

1-6   2   3
4-6   5   1
2-6   3   4
5-6   1   2
3-6   4   5

Y por ultimo a partir de la segunda columna voy formando las demas "parejas" que faltan con los equipos de forma descendente, desde el ultimo (sin considerar al equipo 6 que ya fue agregado) hasta el primero.

1-6   2-5   3-4
4-6   5-3   1-2
2-6   3-1   4-5
5-6   1-4   2-3
3-6   4-2   5-1

De esta manera ya quedaria armado el fixture donde cada fila correspondería a la fecha y cada columna (que seria cada pareja que hay en esa fila) a los partidos.

Siguiendo el ejemplo

FECHA 1	1vs6	2vs5	3vs4
FECHA 2	4vs6	5vs3	1vs2
FECHA 3	2vs6	3vs1	4vs5
FECHA 4	5vs6	1vs4	2vs3
FECHA 5	3vs6	4vs2	5vs1
y mi codigo es este...

Código:
public void CrearCombinaciones(String equipos[]) {

		// tv_calendario.setText(equipos[1] + equipos[0]); //Prueba ok

		String matriz1[][] = new String[equipos.length - 1][equipos.length / 2];
		String matriz2[][] = new String[equipos.length - 1][equipos.length / 2];
		String matriz3[][] = new String[equipos.length - 1][equipos.length / 2];
		int cont = 0;

		for (int i = 0; i < equipos.length - 1; i++) {
			for (int j = 0; j < equipos.length / 2; j++) {
				if (cont == equipos.length - 2) {
					matriz1[i][j] = Integer.toString(cont);
					cont = 0;
				} else {
					matriz1[i][j] = Integer.toString(cont);
					cont++;
				}
			}
		}
		/****************************** Primera Vuelta ***************************/
		int cont2 = equipos.length - 2;
		// Primera vuelta
		for (int k = 0; k < equipos.length - 1; k++) {
			for (int n = 0; n < equipos.length / 2; n++) {
				if (n == 0) {

					// Pongo el mayor que omitiamos
					if (k % 2 == 0) {
						// Local
						matriz2[k][n] = (equipos.length - 1) + "vs"
								+ matriz1[k][n] + "\n";
					} else {
						// Visitante
						matriz2[k][n] = matriz1[k][n] + "vs"
								+ (equipos.length - 1) + "\n";
					}

				} else {
					if (cont2 == 0) {
						matriz2[k][n] = matriz1[k][n] + "vs"
								+ Integer.toString(cont2) + "\n";
						cont2 = equipos.length - 2;
					} else {
						matriz2[k][n] = matriz1[k][n] + "vs"
								+ Integer.toString(cont2) + "\n";
						cont2--;
					}
				}
			}

		}
		/****************************** Segunda Vuelta ***************************/

		int cont3 = equipos.length - 2;
		// Primera vuelta
		for (int k = 0; k < equipos.length - 1; k++) {
			for (int n = 0; n < equipos.length / 2; n++) {
				if (n == 0) {

					// Pongo el mayor que omitiamos
					if (k % 2 == 0) {
						// Visitante
						matriz3[k][n] = matriz1[k][n] + "vs"
								+ (equipos.length - 1) + "\n";
					} else {
						// Local
						matriz3[k][n] = (equipos.length - 1) + "vs"
								+ matriz1[k][n] + "\n";
					}

				} else {
					if (cont3 == 0) {
						matriz3[k][n] = Integer.toString(cont3) + "vs"
								+ matriz1[k][n] + "\n";
						cont3 = equipos.length - 2;
					} else {
						matriz3[k][n] = Integer.toString(cont3) + "vs"
								+ matriz1[k][n] + "\n";
						cont3--;
					}
				}
			}

		}

		/******************** mostrarlos ***************/
		String todo = "";
		// Muestro la primera vuelta
		for (int i = 0; i < equipos.length - 1; i++) {
			for (int j = 0; j < equipos.length / 2; j++) {
				todo = todo + matriz2[i][j];
			}
			todo = todo + "\n";
		}
		// Muestro la segunda vuelta
		for (int i = 0; i < equipos.length - 1; i++) {
			for (int j = 0; j < equipos.length / 2; j++) {
				todo = todo + matriz3[i][j];
			}
			todo = todo + "\n";
		}

		tv_calendario.setText(todo);
	}

Etiquetas: calendario, todo
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 16:30.