Advertisement
chete

lab8

Apr 30th, 2014
525
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.52 KB | None | 0 0
  1. import java.util.Scanner;
  2.  
  3.  
  4. public class Main {
  5.  
  6.     /**
  7.      * @param args
  8.      */
  9.     public static void main(String[] args) {
  10.         //1.-leer todas las cartas,crear los objetos carta asociados,almacenarlos
  11.         Carta[] cartasleidas = leerCartas();
  12.        
  13.         //2.- Eliminar las cartas repetidas
  14.         Carta[] cartasNoRepes = eliminarCartasrepetidas(cartasleidas);
  15.        
  16.         //3.- Ordenar las cartas por palo y numero
  17.         ordenarCartasPorPaloYNumero(cartasNoRepes);
  18.        
  19.         //4._Imprimir las cartas
  20.         imprimirCartas(cartasNoRepes);
  21.        
  22.        
  23.     }
  24.     private static void imprimirCartas(Carta[] cartasNoRepes) {
  25.         if(cartasNoRepes.length  > 0)
  26.             System.out.print(cartasNoRepes[0]);
  27.         for(int i = 0; i<cartasNoRepes.length;i++)
  28.             System.out.print(" " + cartasNoRepes[i]);
  29.         System.out.println();
  30.        
  31.     }
  32.     private static void ordenarCartasPorPaloYNumero(Carta[] nums) {
  33.         for (int i=1; i < nums.length; i++)
  34.               for (int j=nums.length-1; j >= i; j--){
  35.                if (nums[j-1].calculaMenorOIgual(nums[j]) == nums[j]) {
  36.                 Carta aux = nums[j-1];
  37.                 nums[j-1] = nums[j];
  38.                 nums[j] = aux;
  39.                 }
  40.               }
  41.            
  42.     }
  43.     private static Carta[] eliminarCartasrepetidas(Carta[] cartasleidas) {
  44.         int[] aux = new int[10]; // almacena el numero de cartas que tiene el numero asociado a la posicion + 1
  45.         for(int i=0; i<cartasleidas.length; i++)
  46.             aux[cartasleidas[i].getNumero().ordinal()] +=1;
  47.         int ndist=0;//numero de cartas distintas
  48.         for (int i = 0;i<aux.length;i++)
  49.             if (aux[i] == 1)
  50.                 ndist+=1;
  51.        
  52.         Carta[] result = new Carta[ndist];
  53.         for(int i = 0, j = 0;i<cartasleidas.length; i++){
  54.             if (aux[cartasleidas[i].getNumero().ordinal()] == 1){
  55.                 result[j++] = cartasleidas[i];
  56.             }
  57.        
  58.         }
  59.             return result;
  60.     }
  61.     /** leer las cadenas de la entrada estandar,crea los objetos Carta asociados y
  62.      * los almacena en un array.
  63.      * @return devuelve el array con los objetos de tipo carta creados a partir de la entrada
  64.      */
  65.     private static Carta[] leerCartas() {
  66.         final int MAXNCARTAS =10; //iNTEGER.MAX_INT
  67.         Scanner lee = new Scanner(System.in);
  68.         Carta[] cartas = new Carta[MAXNCARTAS];
  69.         int ncartas = 0; //numero cartas leido
  70.         while(ncartas < MAXNCARTAS && lee.hasNext())
  71.             cartas[ncartas++] = new Carta(lee.next());
  72.         if(ncartas==MAXNCARTAS)
  73.             return cartas;
  74.         Carta[] aux = new Carta[ncartas];
  75.         for(int i = 0; i<ncartas; i++)
  76.             aux[i] = cartas[i];
  77.         return aux;
  78.        
  79.        
  80.        
  81.     }}
  82.        
  83.    
  84.     class Carta{
  85.          
  86.            /** Atributo que almacena el palo de la carta.*/
  87.            private PaloCarta palo;
  88.            
  89.            /** Atributo que almacena el número de la carta.*/
  90.            private NumeroCarta numero;
  91.          
  92.             /** Constructor que crea una carta con el número y palo dados.
  93.  
  94.                 @param n Un número válido de una carta de la baraja española.  
  95.                 @param p Un palo válido de la baraja española.
  96.             */
  97.            public Carta( NumeroCarta n, PaloCarta p){
  98.                numero = n; palo = p;
  99.  
  100.                }
  101.  
  102.            
  103.             public Carta(String next) {
  104.                 switch (next.charAt(next.length()-1)){
  105.                 case 'o': palo = PaloCarta.OROS;break;
  106.                 case 'c': palo = PaloCarta.COPAS;break;
  107.                 case 'e': palo = PaloCarta.ESPADAS;break;
  108.                 case 'b': palo = PaloCarta.BASTOS;break;
  109.                 }
  110.                
  111.                 if (next.length() == 2)
  112.                     numero = NumeroCarta.values()[Character.digit(next.charAt(0), 10) - 1]; //devuelve array con todos los valores
  113.                 else
  114.                     numero = NumeroCarta.values()[Integer.parseInt(next.substring(0,2))];
  115.             }
  116.  
  117.  
  118.             /** Devuelve el palo de la carta.
  119.                 @return El palo de la carta.
  120.             */
  121.             public PaloCarta getPalo() {return palo;}
  122.  
  123.             /** Devuelve el número de la carta.
  124.                 @return El palo de la carta.
  125.             */
  126.             public NumeroCarta getNumero() {return numero;}
  127.  
  128.  
  129.             /** Método que devuelve una cadena con el palo de la carta.
  130.              */
  131.             public String nombrePalo (){
  132.                 switch (palo){
  133.                     case OROS: return "o";
  134.                     case COPAS: return "c";
  135.                     case ESPADAS: return "e";
  136.                     case BASTOS: return "b";
  137.                 }
  138.                 return ""; //Para la queja del compilador
  139.             }
  140.  
  141.             /** Método que devuelve una cadena con el numero de la carta.
  142.              */
  143.             public String nombreNumero (){
  144.                 switch (numero){
  145.                     case AS: return "1";
  146.                     case DOS: return "2";
  147.                     case TRES: return "3";
  148.                     case CUATRO: return "4";
  149.                     case CINCO: return "5";
  150.                     case SEIS: return "6";
  151.                     case SIETE: return "7";
  152.                     case SOTA: return "10";
  153.                     case CABALLO: return "11";
  154.                     case REY: return "12";
  155.                 }
  156.                 return ""; //Para la queja del compilador
  157.             }
  158.  
  159.             /** Método de ordenación de dos cartas. Permite saber si la carta
  160.                 actual es menor o igual que la carta pasada como argumento. El
  161.                 orden usado es el clásico en las cartas españolas: primero ordenar
  162.                 por palos (OROS < COPAS < ESPADAS < BASTOS) y dentro del palo
  163.                 ordenar por números (AS < DOS < ... < SOTA < CABALLO < REY)
  164.  
  165.                 @param carta  la carta a comparar con la carta actual.
  166.                 @return la carta menor entre la carta actual y la carta pasada
  167.                         como argumento.
  168.              */
  169.             public Carta calculaMenorOIgual(Carta carta){
  170.                     if (palo.ordinal() < carta.palo.ordinal())
  171.                     return this;
  172.                     if (carta.palo.ordinal() < palo.ordinal())
  173.                     return carta;
  174.                     if (numero.ordinal() < carta.numero.ordinal())
  175.                     return this;
  176.                     if (carta.numero.ordinal() < numero.ordinal())
  177.                     return carta;
  178.                 return this;
  179.             }  
  180. @Override
  181. public String toString(){
  182.     return nombreNumero()+ nombrePalo();
  183. }
  184.            
  185.          
  186.            
  187.     }
  188.  
  189.  
  190.  
  191.      enum PaloCarta{OROS,COPAS,ESPADAS,BASTOS}
  192.      enum NumeroCarta{AS,DOS,TRES,CUATRO,CINCO,SEIS,SIETE,SOTA,CABALLO,REY}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement