WallHero

TP02E02

Sep 22nd, 2020 (edited)
111
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 PuntoDos {
  5.  
  6.     Scanner scanner = new Scanner(System.in);
  7.     public static void main(String[] args) {
  8.         PuntoDos myapp = new PuntoDos();
  9.         myapp.run();
  10.     }
  11.    
  12.     boolean isOpenChar(char p)
  13.     {
  14.         return (p == '(' || p == '{' || p == '[');
  15.     }
  16.     boolean onlyParentheses(String x)
  17.     {
  18.         for(int i = 0; i < x.length(); i++)
  19.         {
  20.             if(x.charAt(i) != '(' && x.charAt(i) != '{' && x.charAt(i) != '[' && x.charAt(i) != ')' && x.charAt(i) != '}' && x.charAt(i) != ']') return false;
  21.         }
  22.         return true;
  23.     }
  24.     String forceReadParentheses()
  25.     {
  26.         String ret = "";
  27.         try
  28.         {
  29.             System.out.println("Introduzca parentización:");
  30.             while(!onlyParentheses(ret = scanner.next())) System.out.println("Introduzca parentización:");
  31.         }
  32.         catch(Exception ex)
  33.         {
  34.             System.out.println("Error en la carga de la parentización, reintente.");
  35.         }
  36.         return ret;
  37.        
  38.     }
  39.     void run()
  40.     {
  41.         try
  42.         {
  43.             String parentheses = forceReadParentheses();
  44.             System.out.println(checkParentheses(parentheses) ? "Bien parentizado." : "Mal parentizado.");
  45.            
  46.         }catch (Exception e) {
  47.             System.out.println("Error durante la carga.");
  48.         }
  49.        
  50.        
  51.     }
  52.     boolean isBalanced(char p, char n)
  53.     {
  54.         return (p == '(' && n ==')') || (p == '[' && n ==']') || (p == '{' && n =='}');
  55.     }
  56.     boolean checkParentheses(String parentheses)
  57.     {
  58.         Stack<Character> piv = new Stack<Character>();
  59.  
  60.         for(int i = 0; i < parentheses.length(); i++)
  61.         {
  62.             char n = parentheses.charAt(i);
  63.             if(isOpenChar(n)) piv.add(n);
  64.             else
  65.             {
  66.                 char outChar;
  67.                 if(!piv.isEmpty()) outChar = piv.pop();
  68.                 else return false;
  69.                 if(!isBalanced(outChar, n)) return false;
  70.             }
  71.         }
  72.         return piv.isEmpty();
  73.     }
  74. }
  75.  
RAW Paste Data