WallHero

TP02E04

Sep 22nd, 2020 (edited)
977
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import java.util.Scanner;
  2. import java.util.Stack;
  3.  
  4. public class PuntoCuatro {
  5.    
  6.     Scanner scanner = new Scanner(System.in);
  7.     public static void main(String[] args) {
  8.         new PuntoCuatro().run();
  9.  
  10.     }
  11.    
  12.     void proccess(Stack<Character> stack, char newChar)
  13.     {
  14.         Stack<Character> backupSort = new Stack<Character>();
  15.         while(!stack.isEmpty() && Character.toLowerCase(stack.peek()) > Character.toLowerCase(newChar))
  16.         {
  17.             backupSort.push(stack.pop());              
  18.         }
  19.         stack.push(newChar);
  20.         while(!backupSort.isEmpty()) stack.push(backupSort.pop());     
  21.     }
  22.    
  23.     boolean isValidLetter(char xCh)
  24.     {
  25.         return Character.isAlphabetic(xCh);
  26.     }
  27.    
  28.     char forceReadAnLetter()
  29.     {
  30.         System.out.println("Introduzca una letra (si desea terminar la carga ingrese @):");
  31.         char x =' ';
  32.         String piv;
  33.         try
  34.         {
  35.             while((piv=scanner.next()).length() > 1 || !isValidLetter(x=piv.charAt(0)) && x!= '@') System.out.println("Debe introducir una letra.\nIntroduzca letra:");
  36.         }
  37.         catch(Exception ex)
  38.         {
  39.             System.out.println("Error en la carga.");
  40.         }
  41.         return x;
  42.     }
  43.    
  44.     boolean isVowel(char xCh)
  45.     {
  46.         xCh = Character.toLowerCase(xCh);
  47.         return xCh == 'a' || xCh == 'e' || xCh == 'i' || xCh == 'o' || xCh == 'u';
  48.     }
  49.     void showStackValues(Stack<Character> stack)
  50.     {
  51.         int countConsonants = stack.size();
  52.         System.out.print("Elementos de la pila:");
  53.         Stack<Character> showStack = new Stack<Character>();
  54.         while(!stack.isEmpty())
  55.         {
  56.             char popped = stack.pop();
  57.             if(isVowel(popped)) countConsonants--;
  58.             showStack.push(popped);
  59.         }
  60.         while(!showStack.isEmpty()) System.out.print(showStack.pop() + (stack.isEmpty() ? "" : ","));
  61.         System.out.println("\nConsonantes:" + countConsonants);
  62.        
  63.     }
  64.    
  65.     boolean isRandom()
  66.     {
  67.         char x = '\0';
  68.         while(true)
  69.         {
  70.             try
  71.             {
  72.                 System.out.println("¿Generar valores aleatorios? (S/N)");
  73.                 x =Character.toUpperCase(scanner.next().charAt(0));
  74.                 if(x == 'S' || x == 'N') return x == 'S';
  75.                 System.out.println("Opción inválida, reintente.");
  76.             }catch (Exception e) {
  77.                 System.out.println("Opción inválida, reintente.");
  78.             }
  79.         }
  80.     }
  81.     static int getRandomIntBetweenRange(double min, double max){
  82.         int x = (int) ((int)(Math.random()*((max-min)+1))+min);
  83.         return x;
  84.     }
  85.     char generateRandomLetter()
  86.     {
  87.         return ((getRandomIntBetweenRange(0,17)%16 == 2) ? '@' : (char) (getRandomIntBetweenRange(0, 25)+65));
  88.     }
  89.    
  90.     void run()
  91.     {
  92.         char newChar;
  93.         Stack<Character> stackLetters = new Stack<Character>();
  94.         boolean random = isRandom();
  95.         while((!random && (newChar = forceReadAnLetter()) != '@') || random && (newChar = generateRandomLetter()) != '@')
  96.         {
  97.             proccess(stackLetters, newChar);
  98.         }
  99.         showStackValues(stackLetters);
  100.     }
  101.  
  102. }
  103.  
RAW Paste Data