Advertisement
nRikee

Emparellar

Dec 28th, 2011
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.35 KB | None | 0 0
  1. import java.util.*;
  2.  
  3. /**
  4.  * Donat una sèrie de jugadors els emparella.
  5.  *
  6.  * @author nRikee
  7.  * @url https://twitter.com/#!/nRikee93
  8.  * @version 0.beta
  9.  */
  10. public class Emparellar {
  11.     Scanner tec = new Scanner(System.in);
  12.     int jug;
  13.     String[] jugadors;
  14.     String resultat;
  15.    
  16.     /**
  17.      * Calcula el resultat a partir de dades ja donades.
  18.      */
  19.     public Emparellar( int numJugadors, String[] nomsJugadors ){
  20.         jug = numJugadors;
  21.         jugadors = nomsJugadors;
  22.        
  23.         resultat = principal();
  24.     }
  25.    
  26.     /**
  27.      * Arreplega les dades i calcula el resultat.
  28.      */
  29.     public Emparellar(){
  30.         System.out.println("Cuants jugadors?");
  31.         jug = tec.nextInt();
  32.         jugadors = new String[jug];
  33.        
  34.         int a = 0;
  35.         while (a<jug){
  36.             System.out.print("Jugador "+ (a+1) + ": ");
  37.             jugadors[a] = tec.next();
  38.             a++;
  39.         }
  40.         System.out.println();
  41.        
  42.         resultat = principal();
  43.     }
  44.    
  45.     /**
  46.      * Torna una string amb el resultat.
  47.      */
  48.     public String getResultat(){
  49.         return resultat;
  50.     }
  51.    
  52.     /**
  53.      * Imprimix per pantalla el resultat.
  54.      */
  55.     public void imprResultat(){
  56.         System.out.println(resultat);
  57.     }
  58.    
  59.     /**
  60.      * Fa les operacions necesàries i torna la string amb el resultat.
  61.      */
  62.     public String principal(){
  63.         String retorn = "";
  64.  
  65.         int parellesRestants = jug/2; // Porta el nombre de parelles que queden per asignar.
  66.         int jugUno = 0, jugDos = 0; // El nom de cada membre de la parella amb la que es treballa.
  67.         int m = 0; // Es l'index per a l'array historial.
  68.         int[] historial = new int[jug]; // Ací es guarden els jugadors que ja han eixit.
  69.         historial[0] = -1; // Per a que la primera iteració no ixca repetida.
  70.         historial[1] = -2; // Per a que la primera iteració no ixca repetida.
  71.        
  72.         /*
  73.          * Mentres hi haja parelles per asignar.
  74.          */
  75.         while( parellesRestants>0 ){
  76.             jugUno = (int)(Math.random()*jug); // Trau un jugador aleatori.
  77.             jugDos = (int)(Math.random()*jug); // Trau un jugador aleatori.
  78.            
  79.            
  80.             if( !repetit(jugUno,historial,m) && !repetit(jugDos,historial,m) && jugUno!=jugDos ){
  81.                 // IF( cap dels dos jugadors ha eixit abans i ambdós jugadors son diferents )
  82.                 historial[m] = jugUno; // Posa el jugador al historial.
  83.                 historial[m+1] = jugDos; // Posa el jugador al historial.
  84.                 retorn += "Parella " + (m/2+1) + ": " + jugadors[jugUno] + " , " + jugadors[jugDos] + "\n"; // Posa la parella a la String retorn.
  85.                 m = m + 2; // Augmenta l'index m en dos, perquè s'han gastat dos posicions: m i m+1.
  86.                 parellesRestants--; // Augmenta en 1 el nombre de parelles
  87.             }
  88.            
  89.            
  90.         }
  91.        
  92.         /*
  93.          * Si el nombre de jugadors es impar, s'ha de deixar un jugador lliure, per a la repesca.
  94.          */
  95.         if( jug%2==1 ){
  96.             // IF (jugadors impars)
  97.            
  98.             int z=0;
  99.             // Recorregut per tots els jugadors per vore quin no ha estat elegit.
  100.             while( repetit(z, historial, jug-1) ){
  101.                 // MENTRES ( el jugador Z estiga ja elegit )
  102.                 z++;
  103.             }
  104.             retorn += "El jugador " + jugadors[z] + " va a la repesca."; // Posa el jugador solt a la String retorn
  105.         }
  106.        
  107.         return retorn;
  108.     }
  109.    
  110.     /**
  111.      * Mètode privat que torna true o false depenent de si el numero de jugador 'q' ja ha estat elegit o no.
  112.      */
  113.     private boolean repetit(int q, int[] historial, int maxim){      
  114.         boolean retorn = false; // Per defecte false. Així si no es troba que el jugador està repetit, serà fals.
  115.        
  116.         for(int p=0; p<historial.length; p++){
  117.             // Recorre tot el historial. (Fins a m+1)
  118.             if( q==historial[p]){
  119.                 // IF ( el jugador que busquem està en esta posició )
  120.                 retorn = true; // Hem de tornar true.
  121.                 break; // Ja no cal buscar més, acaba la búsqueda.
  122.             }
  123.         }
  124.         return retorn; // Torna el valor de retorn. True si s'ha trobat i false si no s'ha trobat.
  125.     }
  126.    
  127. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement