Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.*;
- /**
- * Donat una sèrie de jugadors els emparella.
- *
- * @author nRikee
- * @url https://twitter.com/#!/nRikee93
- * @version 0.beta
- */
- public class Emparellar {
- Scanner tec = new Scanner(System.in);
- int jug;
- String[] jugadors;
- String resultat;
- /**
- * Calcula el resultat a partir de dades ja donades.
- */
- public Emparellar( int numJugadors, String[] nomsJugadors ){
- jug = numJugadors;
- jugadors = nomsJugadors;
- resultat = principal();
- }
- /**
- * Arreplega les dades i calcula el resultat.
- */
- public Emparellar(){
- System.out.println("Cuants jugadors?");
- jug = tec.nextInt();
- jugadors = new String[jug];
- int a = 0;
- while (a<jug){
- System.out.print("Jugador "+ (a+1) + ": ");
- jugadors[a] = tec.next();
- a++;
- }
- System.out.println();
- resultat = principal();
- }
- /**
- * Torna una string amb el resultat.
- */
- public String getResultat(){
- return resultat;
- }
- /**
- * Imprimix per pantalla el resultat.
- */
- public void imprResultat(){
- System.out.println(resultat);
- }
- /**
- * Fa les operacions necesàries i torna la string amb el resultat.
- */
- public String principal(){
- String retorn = "";
- int parellesRestants = jug/2; // Porta el nombre de parelles que queden per asignar.
- int jugUno = 0, jugDos = 0; // El nom de cada membre de la parella amb la que es treballa.
- int m = 0; // Es l'index per a l'array historial.
- int[] historial = new int[jug]; // Ací es guarden els jugadors que ja han eixit.
- historial[0] = -1; // Per a que la primera iteració no ixca repetida.
- historial[1] = -2; // Per a que la primera iteració no ixca repetida.
- /*
- * Mentres hi haja parelles per asignar.
- */
- while( parellesRestants>0 ){
- jugUno = (int)(Math.random()*jug); // Trau un jugador aleatori.
- jugDos = (int)(Math.random()*jug); // Trau un jugador aleatori.
- if( !repetit(jugUno,historial,m) && !repetit(jugDos,historial,m) && jugUno!=jugDos ){
- // IF( cap dels dos jugadors ha eixit abans i ambdós jugadors son diferents )
- historial[m] = jugUno; // Posa el jugador al historial.
- historial[m+1] = jugDos; // Posa el jugador al historial.
- retorn += "Parella " + (m/2+1) + ": " + jugadors[jugUno] + " , " + jugadors[jugDos] + "\n"; // Posa la parella a la String retorn.
- m = m + 2; // Augmenta l'index m en dos, perquè s'han gastat dos posicions: m i m+1.
- parellesRestants--; // Augmenta en 1 el nombre de parelles
- }
- }
- /*
- * Si el nombre de jugadors es impar, s'ha de deixar un jugador lliure, per a la repesca.
- */
- if( jug%2==1 ){
- // IF (jugadors impars)
- int z=0;
- // Recorregut per tots els jugadors per vore quin no ha estat elegit.
- while( repetit(z, historial, jug-1) ){
- // MENTRES ( el jugador Z estiga ja elegit )
- z++;
- }
- retorn += "El jugador " + jugadors[z] + " va a la repesca."; // Posa el jugador solt a la String retorn
- }
- return retorn;
- }
- /**
- * Mètode privat que torna true o false depenent de si el numero de jugador 'q' ja ha estat elegit o no.
- */
- private boolean repetit(int q, int[] historial, int maxim){
- boolean retorn = false; // Per defecte false. Així si no es troba que el jugador està repetit, serà fals.
- for(int p=0; p<historial.length; p++){
- // Recorre tot el historial. (Fins a m+1)
- if( q==historial[p]){
- // IF ( el jugador que busquem està en esta posició )
- retorn = true; // Hem de tornar true.
- break; // Ja no cal buscar més, acaba la búsqueda.
- }
- }
- return retorn; // Torna el valor de retorn. True si s'ha trobat i false si no s'ha trobat.
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement