Advertisement
juxtine

calculette polo

Mar 18th, 2018
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.72 KB | None | 0 0
  1. package core;
  2. //Requier Java 1.5+
  3. import java.util.Scanner;//Lecture d'un flux sur base d'expressions régulières
  4. import java.util.Stack;//Une pile
  5.  
  6. public class NpiEvaluator {
  7. final static String[] ops={"+","-","*","/","mod","max","min"};//Liste des opérateurs
  8. public static void main(String[] arg){
  9. Scanner clavier=new Scanner(System.in);//permet la lecture d'une saisie utilisateur
  10. System.out.println("Entrez une expression NPI ou \"q\" pour quitter");//Affichage d'un message sur stdout
  11.  
  12. System.out.print(">");
  13. String calc=clavier.nextLine(); // Récupération de la ligne suivante sur stdin
  14. while(!calc.equals("q")){
  15. System.out.print("le résultat est : ");
  16. System.out.println(evaluate(calc)); // Appel à la fonction d'évaluation, fonction principale du programme !
  17. System.out.println("Entrez une expression NPI ou \"q\" pour quitter");
  18. System.out.print(">");
  19. calc=clavier.nextLine();
  20. }
  21. System.out.println("Au revoir :-)"); // Notifier l'utilisateur que le programme est terminé.
  22. }
  23.  
  24. public static int evaluate(String calc){
  25. Stack<String> op=new Stack<String>(); // Une pile, elle sera utilisé comme une pile LIFO
  26.  
  27.  
  28.  
  29.  
  30.  
  31. String[] tabOp=calc.split(" ");//Retourne le tableau de chaine des élléments séparés par " " (espace blanc Ascii(20))
  32. for(int i=0;i<tabOp.length;i++){
  33. if(isOperande(tabOp[i])){//Si on est sur un opérateur, alors, on POP.
  34. int op1=Integer.parseInt(op.pop());
  35. int op2=Integer.parseInt(op.pop());
  36. op.push(doOperande(tabOp[i], op1, op2));//On effectue l'opération
  37. }else{
  38. op.push(tabOp[i]);//On est sur un opérande, on le stocke sur la pile
  39. }
  40. }
  41. return Integer.parseInt(op.pop());//On travail avec des chaines, il faut les convertir en entier.
  42. }
  43. public static boolean isOperande(String op){//Fonction wrap, elle permet de donner un sens à une ligne de code (Abstraction).
  44. return isIn(op,ops);
  45. }
  46. public static boolean isIn(String what,String[] where){//Vérifie la présence d'une chaine dans un tableau de chaine
  47. for(int i=0;i<where.length;i++){
  48. if(where[i].equals(what))return true;
  49. }
  50. return false;
  51. }
  52. public static String doOperande(String op,int op1,int op2){//Execute une opration, retourne 0 si l'opération est inconnue.(risque d'effets de bord, vous DEVEZ implémenter une exeption)
  53. if(op.equals("+")){
  54. return ""+(op1+op2);
  55. }else if(op.equals("-")){
  56. return ""+(op2-op1);
  57. }else if(op.equals("*")){
  58. return ""+op1*op2;
  59. }else if(op.equals("/")){
  60. return ""+op2/op1;
  61. }else if(op.equals("mod")){
  62. return ""+op2%op1;
  63. }else if(op.equals("max")){
  64. return ""+(op1>op2?op1:op2);
  65. }else if(op.equals("min")){
  66. return ""+(op1>op2?op2:op1);
  67. }
  68.  
  69.  
  70. return "0";
  71. }
  72.  
  73. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement