Advertisement
Guest User

Untitled

a guest
Oct 22nd, 2019
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.27 KB | None | 0 0
  1. package Lincalc;
  2. import lincalc.LinCalcJohn;
  3.  
  4. import java.util.Arrays;
  5. import java.util.Scanner;
  6.  
  7. public class LinCalc {
  8.  
  9. public static void printArray(String[] array){
  10. StringBuffer sb = new StringBuffer();
  11. sb.append("[");
  12. for (int i = 0; i < array.length; i++) {
  13. sb.append(array[i]);
  14. sb.append(", ");
  15. }
  16. // Replace the last ", " with "]"
  17. sb.replace(sb.length() - 2, sb.length(), "]");
  18. System.out.println(sb);
  19. }
  20.  
  21. public static void main(String[] args) {
  22. Scanner in = new Scanner(System.in);
  23. String expression;
  24.  
  25.  
  26. double result;
  27.  
  28. System.out.print("Enter expression: ");
  29. expression = in.nextLine();
  30. do {
  31. result = evaluate(expression);
  32. System.out.println("Result was: " + result);
  33. System.out.print("Enter expression: ");
  34. } while (!"".equals(expression = in.nextLine()));
  35. }
  36.  
  37. public static double calc(String[] lexedPostfix) {
  38. return LinCalcJohn.calc(lexedPostfix);
  39. }
  40.  
  41. public static String[] toPostfix(String[] inputData) {
  42. return LinCalcJohn.toPostfix(inputData);
  43. }
  44.  
  45. public static double evaluate(String expression) {
  46. String[] lexedInfix = lex(expression);
  47. String[] lexedPostfix = toPostfix(lexedInfix);
  48. return calc(lexedPostfix);
  49. }
  50.  
  51. public static String[] lex(String expr) {
  52. String operatorer = "*+-/()";
  53. String operander = "0123456789";
  54. String infix = "";
  55. String[] parts = new String [99];
  56. int indexCounter = 0;
  57. char previousChar = '+';
  58.  
  59. for (int i = 0; i < expr.length(); i++) {
  60. char current = expr.charAt(i);
  61. //if (memberOf(current, minus)) {
  62.  
  63. //}
  64. //om medlem i operander, lägg till i tomma stringen infix
  65. if (memberOf(current, operander)) {
  66. infix += current;
  67. parts[indexCounter] = infix;
  68. }
  69. //om medlem i operatorer, räkna index i stringen infix, töm stringen, lägg till värdet av current till arrayen
  70. if (memberOf(current, operatorer)) {
  71. if(memberOf(previousChar, operatorer)) {
  72. //parts[indexCounter] = infix;
  73. //infix = "";
  74. parts[indexCounter] = String.valueOf(current);
  75. System.out.println("abc");
  76. }
  77. parts[indexCounter++] = infix;
  78. infix = "";
  79. parts[indexCounter++] = String.valueOf(current);
  80. }
  81. previousChar = current;
  82. }
  83.  
  84. //int för antalet icke-nulls i arrayen
  85. int newSize = 0;
  86. //loop för att gå igenom arrayen och räkna antalet icke-nulls
  87. for (int i = 0; i < parts.length; i++) {
  88. if (parts[i] != null) {
  89. newSize++;
  90.  
  91. }
  92. System.out.println(newSize);
  93. }
  94. //ny array med storleken av antalet icke-nulls
  95. String[] noNulls = new String[newSize];
  96. //ge den nya arrayen med rätt storlek de gamla värdena
  97. for (int i = 0; i < noNulls.length; i++) {
  98. noNulls[i] = parts[i];
  99.  
  100. }
  101. System.out.println(Arrays.toString(noNulls));
  102.  
  103. return noNulls;
  104.  
  105. }
  106.  
  107. public static boolean memberOf(char x, String z) {
  108.  
  109. for(int i=0; i<z.length(); i++) {
  110. char current = z.charAt(i);
  111. if(current == x) {
  112. return true;
  113. }
  114. }
  115. return false;
  116.  
  117.  
  118. }
  119. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement