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

Buscando alternativas...

Estas en el tema de Buscando alternativas... en el foro de Java en Foros del Web. Hola buenas, acabo de realizar un pequeño código que procesa una serie de partidas en un juego y la verdad es que cumple su cometido ...
  #1 (permalink)  
Antiguo 16/05/2014, 12:07
 
Fecha de Ingreso: mayo-2014
Ubicación: Albacete
Mensajes: 4
Antigüedad: 9 años, 11 meses
Puntos: 0
Buscando alternativas...

Hola buenas, acabo de realizar un pequeño código que procesa una serie de partidas en un juego y la verdad es que cumple su cometido peeeeero lo veo (en mi opinión) demasiado complejo. Por esto mismo, me preguntaba si existe alguna forma de simplificar o acortar el código que os dejo a continuación sin que esta misma modifique la salida del programa en cuestión.

Código Java:
Ver original
  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStreamReader;
  4. import java.util.Arrays;
  5. import java.util.ArrayList;
  6. import java.util.List;
  7.  
  8. public class Codigo2t {
  9.     public static void main(String[] args) throws IOException
  10.     {
  11.         //Leer los datos de entrada (lista de lista) = ListaDepartidas que llama al metodo leerentrada desde teclado.
  12.         ArrayList<ArrayList<String>> listaDePartidas = leerEntradaDesdeTeclado();
  13.        
  14.         //Procesar todas las partidas
  15.         for (ArrayList<String> datosDePartida: listaDePartidas)
  16.         {
  17.             ProcesarPartida(datosDePartida);
  18.             }
  19.     }
  20.    
  21.     //Leer la entrada desde teclado. Devuelve una lista con el contenido de las partidas
  22.  
  23.     public static ArrayList<ArrayList<String>> leerEntradaDesdeTeclado() throws IOException
  24.     {
  25.         ArrayList<ArrayList<String>> listaDePartidas = new ArrayList<ArrayList<String>>();
  26.         ArrayList<String> datosDePartida = new ArrayList<String>();
  27.  
  28.        
  29.             //Definimos un flujo de caracteres de entrada: leerEntrada
  30.             BufferedReader leerEntrada = new BufferedReader(new InputStreamReader(System.in));
  31.  
  32.             //Leemos la entrada, finaliza al introducir un cero
  33.             while(true)
  34.             {
  35.                 String linea = leerEntrada.readLine();
  36.  
  37.                 if(linea.equalsIgnoreCase("0"))
  38.                 {
  39.                     if(datosDePartida.size() > 0)
  40.                     {
  41.                         listaDePartidas.add(datosDePartida);
  42.                     }
  43.                     break;
  44.                 }
  45.                 else
  46.                 {
  47.                     if(linea.length() == 1 || linea.length() == 2) //Comienzo del juego
  48.                     { //Tamaño del tablero entre 2 y 50
  49.                         if(datosDePartida.size() > 0)
  50.                         {
  51.                             listaDePartidas.add((ArrayList<String>)datosDePartida.clone()); //Lo copio
  52.                             datosDePartida.clear(); //Lo limpio para que me quede vacio y despues meter otros datos nuevos
  53.                         }
  54.                        
  55.                         datosDePartida.add(linea); //Lo añado
  56.                     }
  57.                     else //Informacion de una casilla del tablero
  58.                     {
  59.                         datosDePartida.add(linea);
  60.                     }  
  61.                 }
  62.             }
  63.          
  64.        
  65.  
  66.         return listaDePartidas; //Devuelve la informacion intrpducida por teclado
  67.         //Cuando acaba de leer me devuelve una lista con todas las partidas
  68.     }
  69.    
  70.     //Procesar la partida para proportcionar el resultado
  71.     public static void ProcesarPartida(ArrayList<String> datosDePartida)
  72.     {
  73.         String tablero[][] = null;
  74.         ArrayList<String[][]> listaTableros = new ArrayList<String[][]> ();
  75.         int numeroDeMovimiento = 1;
  76.         int tamañoTablero = 0;
  77.  
  78.         for (String datos: datosDePartida)
  79.         {
  80.             if(datos.length() == 1 || datos.length() == 2 ) //Tamaño del tablero // longitud (2....50)
  81.             {
  82.                 tamañoTablero = Integer.valueOf(datos); //Pasamos un String a un Entero
  83.                 //SI el tamaño del tablero es > 50
  84.                 if (tamañoTablero>50||tamañoTablero<2){
  85.                     //System.out.println("tamaño del tablero erroneo, el tablero tiene que se > que 1 y < de 51");
  86.                     System.exit(0);}
  87.                 else
  88.                 tablero = new String [tamañoTablero][tamañoTablero];
  89.                
  90.                 //Añadir el tablero inicial a la lista de tableros
  91.                 String[][] tableroClone = ClonarTablero(tablero);
  92.                 listaTableros.add(tableroClone);
  93.             }
  94.             else //Estamos dentro de una partida (es un movimiento) 1 1 +
  95.             {
  96.                 String[] arrayDatos = datos.split(" ");
  97.                
  98.                 int fila = Integer.valueOf(arrayDatos[0]); //valueOf pasarlo a entero
  99.                 int columna = Integer.valueOf(arrayDatos[1]);
  100.                
  101.                 if(arrayDatos[2].equalsIgnoreCase("-")) //Si el tercer elemento es - que ponga nulo
  102.                 {
  103.                     tablero[fila - 1][columna - 1] = null; //El movimiento que el hace es uno mas porque las matrices empiezan en 0,0
  104.                 }
  105.                 else // Si es + que me ponga un +
  106.                 {
  107.                     tablero[fila - 1][columna - 1] = arrayDatos[2];
  108.                 }
  109.            
  110.                 //Para imprimir el tablero
  111.                 //System.out.println("\nActual tablero introducido por el jugador:");
  112.                 //imprimir(tablero);
  113.                
  114.                 boolean patronRepetido = tableroExistente(tablero, listaTableros); //Este metodo lo que hace es decirme si este tablero existe o no
  115.                 if (patronRepetido == true) //Si ese tablero ya existe, ya ha ganado un jugador
  116.                 {
  117.                     //Obtener el numero del jugador que ha ganado
  118.                     int numeroJugadorPerdedor;
  119.                     int numeroDeJugadorGanador;
  120.  
  121.                     if (numeroDeMovimiento % 2 == 0) //Se puede modificar siendo en vez de par, impar
  122.                     {
  123.                         numeroJugadorPerdedor = 2;
  124.                         numeroDeJugadorGanador = 1;
  125.                     }
  126.                     else
  127.                     {
  128.                         numeroJugadorPerdedor = 1;
  129.                         numeroDeJugadorGanador = 2;
  130.                     }
  131.                    
  132.                     System.out.println("El jugador " + numeroDeJugadorGanador + " ganaría en el movimiento " + numeroDeMovimiento);
  133.                     return;
  134.                 }
  135.                 else //Si no existe añado ese tablero a la lista de tableros para volver a compararlo mas tarde
  136.                 {
  137.                     String[][] tableroClone = ClonarTablero(tablero);
  138.                    
  139.                     listaTableros.add(tableroClone);
  140.                    
  141.                     numeroDeMovimiento++; //Aqui hay un movimiento de mas porque lo hemos inicializado a uno
  142.                 }
  143.             }
  144.         }
  145.        
  146.         if(2 * tamañoTablero == numeroDeMovimiento - 1) //Y aqui hay que quitar ese uno
  147.         {
  148.             System.out.println("Empate");
  149.         }
  150.         else
  151.         {
  152.             System.out.println("Error");
  153.         }
  154.     }

Etiquetas: buscando, metodo, programa, string
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 08:48.