Advertisement
lewivo

Untitled

Nov 20th, 2017
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.02 KB | None | 0 0
  1. package calc;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.Arrays;
  5. import java.util.List;
  6. import java.util.StringTokenizer;
  7.  
  8. import static java.lang.Character.getNumericValue;
  9. import static java.lang.Character.isDigit;
  10. import static java.lang.Double.NaN;
  11.  
  12.  
  13. /*
  14. * A calculator for rather simple arithmetic expressions
  15. *
  16. * NOTE:
  17. * - No real or negative numbers implemented
  18. */
  19. public class Calculator {
  20.  
  21. // Error messages (more on static later)
  22. final static String MISSING_OPERAND = "Missing or bad operand";
  23. final static String DIV_BY_ZERO = "Division with 0";
  24.  
  25. // Definition of operators
  26. final static String OPERATORS = "+-*/^";
  27.  
  28. // Method used in REPL
  29. double eval(String expr) {
  30. if (expr.length() == 0) {
  31. return NaN;
  32. }
  33. List<String> tokens = tokenize(expr);
  34. List<String> postfix = infix2Postfix(tokens);
  35. return evalPostfix(postfix);
  36. }
  37.  
  38. // ------ Evaluate RPN expression -------------------
  39.  
  40. double evalPostfix(List<String> postfix) {
  41. // TODO
  42. return 0;
  43. }
  44.  
  45.  
  46. // ------- Infix 2 Postfix ------------------------
  47.  
  48. // Error messages
  49. final static String MISSING_OPERATOR = "Missing operator or parenthesis";
  50. final static String OP_NOT_FOUND = "Operator not found";
  51.  
  52. List<String> infix2Postfix(List<String> infix) {
  53. // TODO
  54.  
  55. return null;
  56. }
  57.  
  58. // ---------- Tokenize -----------------------
  59.  
  60. List<String> tokenize(String expr) {
  61. // TODO
  62. //StringTokenizer string= new StringTokenizer(expr," ");
  63. //"+-/*".contains(string);
  64. //String[] result =myString.split(string);
  65. List<String> res = new ArrayList<>();
  66.  
  67.  
  68. for(int i = 0; i < expr.length(); i++) {
  69. if(isOperator(expr.charAt(i)) ) {
  70. res.add(Character.toString(expr.charAt(i)));
  71. }
  72.  
  73.  
  74. }return res; }
  75.  
  76. List<String> digits(String expr){
  77. List<String> digits= new ArrayList<>();
  78. for(int i = 0; i < expr.length(); i++){
  79. int raise=0;
  80. int sum=0;
  81.  
  82. if(!isOperator(expr.charAt(i)) && isDigit(expr.charAt(i))){
  83. int j=i;
  84.  
  85. while(Validlocation(expr,j) && isDigit(expr.charAt(j))){j++;}
  86. j--;
  87. for(int k =i; k <=j; k++){
  88.  
  89. int a=(int) Math.round(Math.pow(10,j));
  90. int b= getNumericValue(expr.charAt(i));
  91. sum= a*b+sum;
  92. j--;
  93. }
  94. String Stringsum= Integer.toString(sum);
  95. digits.add(Stringsum);
  96. }
  97.  
  98. }
  99.  
  100. return digits;}
  101.  
  102. boolean Validlocation(String expr,int j){
  103. boolean status=false;
  104.  
  105. if ( 0<=j && j<expr.length()){
  106. status=true;}
  107. return status;}
  108.  
  109. boolean isOperator(char c) {
  110. return c == '*' || c == '+' || c == '-' || c == '/';
  111. }
  112.  
  113.  
  114.  
  115. char[] returnOperator(String expr) {
  116. int amountop = 0;
  117. for (int i = 0; i < expr.length(); i++) {
  118. if (expr.charAt(i) == '*' || expr.charAt(i) == '/' || expr.charAt(i) == '(' || expr.charAt(i) == '+' || expr.charAt(i) == '-' || expr.charAt(i) == ')') {
  119. amountop++;
  120. }
  121. }
  122. // räknar hur många operatorer det finns
  123. char[] Operator = new char[amountop];
  124. for (int j = 0; j < amountop; j++)
  125. if (expr.charAt(j) == '*' || expr.charAt(j) == '/' || expr.charAt(j) == '(' || expr.charAt(j) == '+' || expr.charAt(j) == '-' || expr.charAt(j) == ')')
  126. {Operator[j] =expr.charAt(j);} // om operator stoppar vi det in i array}
  127. return Operator;}
  128.  
  129.  
  130. char[] returnDigits(String expr){
  131. char[] array = new char[expr.length()];
  132. int amountdig = 0;
  133. char s;
  134. for (int j = 0; j < expr.length(); j++) {
  135. s = expr.charAt(j);
  136. if (Character.isDigit(s)) {
  137. amountdig++;
  138. }
  139. }
  140. char[] digarray = new char[amountdig];
  141. for (int i = 0; i <digarray.length; i++){
  142. s = expr.charAt(i);
  143. if (Character.isDigit(s)) {
  144. digarray[i]=expr.charAt(i);
  145. }
  146. }
  147. return digarray;}
  148.  
  149.  
  150.  
  151.  
  152.  
  153.  
  154.  
  155.  
  156.  
  157.  
  158. // ----------- Helpers ------------------------
  159.  
  160. int getPrecedence(String op) {
  161. if ("+-".contains(op)) {
  162. return 2;
  163. } else if ("*/".contains(op)) {
  164. return 3;
  165. } else if ("^".contains(op)) {
  166. return 4;
  167. } else {
  168. throw new RuntimeException(OP_NOT_FOUND);
  169. }
  170. }
  171.  
  172. Assoc getAssociativity(String op) {
  173. if ("+-*/".contains(op)) {
  174. return Assoc.LEFT;
  175. } else if ("^".contains(op)) {
  176. return Assoc.RIGHT;
  177. } else {
  178. throw new RuntimeException(OP_NOT_FOUND);
  179. }
  180. }
  181.  
  182. enum Assoc {
  183. LEFT,
  184. RIGHT
  185. }
  186.  
  187.  
  188. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement