nengo

CalculadoraModelo.java

Jul 1st, 2021
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.25 KB | None | 0 0
  1. package es.uv.eu.calculadora.modelo;
  2.  
  3. import java.util.ArrayList;
  4.  
  5. /**
  6.  *
  7.  * @author
  8.  */
  9. public final class CalculadoraModelo {
  10.    
  11.     private ArrayList<String> pila = new ArrayList<>();
  12.     private String numero;
  13.     private boolean nuevoNumero;
  14.    
  15.    
  16.     public CalculadoraModelo() {
  17.         reset();
  18.     }
  19.  
  20.     public void addDigit(String d) {
  21.         if (nuevoNumero) {
  22.             numero = d;
  23.             nuevoNumero = false;
  24.         }
  25.         else {
  26.             numero += d;
  27.         }
  28.     }
  29.    
  30.     public void addPoint() {
  31.         if (nuevoNumero) {
  32.             nuevoNumero = false;
  33.             numero = "0.";
  34.         }
  35.         else if (!numero.contains(".")) {
  36.             numero += ".";
  37.         }
  38.     }
  39.    
  40.     public void calc(String operacion) {
  41.         float c;
  42.  
  43.         if ("+-*/".indexOf(operacion) != -1 && pila.isEmpty()) {
  44.             // Apilamos las operaciones
  45.             pila.add(numero);
  46.             pila.add(operacion);
  47.             nuevoNumero = true;
  48.         }
  49.         else if ("+-*/=".indexOf(operacion) != -1 && pila.size() == 2) {
  50.            
  51.             c = opera(pila.get(0), pila.get(1), numero);
  52.             numero = String.valueOf(c);
  53.  
  54.             // Borramos la pila y reiniciamos
  55.             pila.clear();
  56.             nuevoNumero = true;
  57.            
  58.             // Si la operacion debe continuar, apilamos
  59.             if (!operacion.equals("=")) {
  60.                 pila.add(numero);          
  61.                 pila.add(operacion);
  62.             }
  63.         }
  64.     }
  65.  
  66.     public void deleteChar() {
  67.         if (nuevoNumero) {
  68.             reset();
  69.         }
  70.         else if (numero.length() > 1) {
  71.             numero = numero.substring(0, numero.length()-1);
  72.         }
  73.         else if (numero.length() == 1) {
  74.             nuevoNumero = true;
  75.             numero = "0";
  76.         }
  77.     }
  78.    
  79.     public String getValor() {
  80.         return numero;
  81.     }
  82.  
  83.     public final void reset() {
  84.         pila.clear();
  85.         numero = "0";
  86.         nuevoNumero = true;
  87.     }
  88.    
  89.     public String getStatus() {
  90.         if (pila.isEmpty()) {
  91.             return numero;
  92.         }
  93.         else if (nuevoNumero) {
  94.             return pila.get(0) + " " + pila.get(1);
  95.         }
  96.         else {
  97.             return pila.get(0) + " " + pila.get(1) + " " + numero;
  98.         }
  99.     }
  100.  
  101.     private float opera(String m1, String op, String m2) {
  102.         float a, b, c;
  103.  
  104.         try {
  105.             a = Float.valueOf(m1);
  106.         }
  107.         catch (Exception anyException) {
  108.             a = (float)0.0;
  109.         }
  110.  
  111.         try {
  112.             b = Float.valueOf(m2);
  113.         }
  114.         catch (Exception anyException) {
  115.             b = (float)0.0;
  116.         }
  117.  
  118.         // Operamos
  119.         switch(op) {
  120.             case "+":
  121.                 c = a+b;
  122.                 break;
  123.                
  124.             case "-":
  125.                 c = a - b;
  126.                 break;
  127.                    
  128.             case "*":
  129.                 c = a * b;
  130.                 break;
  131.                    
  132.             case "/":
  133.                 c = a / b;
  134.                 break;
  135.                    
  136.             default:
  137.                 c = (float)0.0;
  138.                 break;
  139.         }
  140.         return c;
  141.     }    
  142. }
Add Comment
Please, Sign In to add comment