fork download
  1. package fracCalc;
  2.  
  3. import java.util.Scanner;
  4.  
  5. public class fraction {
  6.  
  7. public static void main(String[] args) {
  8. Scanner scanner = new Scanner(System.in);
  9.  
  10. System.out.print("Enter a fraction: ");
  11. String input = scanner.nextLine();
  12.  
  13. // loop until user enters 'quit'
  14. while (!input.equalsIgnoreCase("quit")) {
  15. System.out.println(produceAnswer(input));
  16. System.out.print("Enter a fraction: ");
  17. input = scanner.nextLine();
  18. }
  19.  
  20. System.out.println("Goodbye!");
  21. scanner.close();
  22.  
  23. }
  24.  
  25. private static String produceAnswer(String input) {
  26.  
  27. // parse input
  28. String t[] = input.split(" ");
  29. if (t.length != 3) return "Check format!";
  30. MixedFraction a = parseFraction(t[0]);
  31. a.check();
  32. String operator = t[1];
  33. MixedFraction b = parseFraction(t[2]);
  34. b.check();
  35.  
  36. MixedFraction result;
  37.  
  38. //addition
  39. switch(operator) {
  40. case "+":
  41. result = a.add(b);
  42. break;
  43. case "-":
  44. result = a.subtract(b);
  45. break;
  46. case "*":
  47. result = a.multiply(b);
  48. break;
  49. case "/":
  50. result = a.divide(b);
  51. break;
  52. default:
  53. return a + " " + operator + " " + b + " = " + result;
  54. }
  55.  
  56. }
  57. //parse
  58. private static MixedFraction parseFraction(String fraction) {
  59.  
  60. MixedFraction mf = new MixedFraction();
  61.  
  62. String[] t;
  63. if (fraction.contains("_")) {
  64. t = fraction.split("_");
  65. mf.number = Integer.parseInt(t[0]);
  66. fraction = t[1];
  67. }
  68. else mf.number = 0;
  69.  
  70. t = fraction.split("/");
  71. mf.num = Integer.parseInt(t[0]);
  72. mf.denom = Integer.parseInt(t[1]);
  73. return mf;
  74. }
  75.  
  76. }
  77.  
  78. class MixedFraction {
  79. public int number, num, denom;
  80.  
  81. public MixedFraction() {
  82. number = 0;
  83. num = 0;
  84. denom = 0;
  85. }
  86.  
  87. private int gcd(int a, int b) {
  88. while (b != 0) {
  89. int t = b;
  90. b = a % b;
  91. a = t;
  92. }
  93. return a;
  94. }
  95.  
  96. private int lcm(int a, int b) {
  97. return Math.abs(a * b) / gcd(a, b);
  98. }
  99.  
  100. public void check() {
  101. if (this.num <= this.denom) return;
  102. this.number += this.num / this.denom;
  103. this.num = this.num % this.denom;
  104. }
  105. public String toString() {
  106. return (number != 0 ? number + "_" : "") + num + "/" + denom;
  107. }
  108. //adding the fractions
  109. public MixedFraction add(MixedFraction b) {
  110. MixedFraction mf = new MixedFraction();
  111. int a_num = this.num + this.number * this.denom;
  112. int b_num = b.num + b.number * b.denom;
  113. int lcm = lcm(this.denom, b.denom);
  114. a_num *= lcm / this.denom;
  115. b_num *= lcm / b.denom;
  116. mf.num = a_num + b_num;
  117. mf.denom = lcm;
  118. mf.check();
  119. return mf;
  120. }
  121.  
  122. //multiply the fractions
  123. public MixedFraction multiply(MixedFraction b) {
  124. MixedFraction mf = new MixedFraction();
  125. int a_num = this.num * this.number * this.denom;
  126. int b_num = b.num * b.number * b.denom;
  127. int lcm = lcm(this.denom, b.denom);
  128. a_num *= lcm / this.denom;
  129. b_num *= lcm / b.denom;
  130. mf.num = a_num * b_num;
  131. mf.denom = lcm;
  132. mf.check();
  133. return mf;
  134. }
  135.  
  136. //subtract the fractions
  137. public MixedFraction subtract(MixedFraction b) {
  138. MixedFraction mf = new MixedFraction();
  139. int a_num = this.num - this.number * this.denom;
  140. int b_num = b.num - b.number - b.denom;
  141. int lcm = lcm(this.denom, b.denom);
  142. a_num *= lcm / this.denom;
  143. b_num *= lcm / b.denom;
  144. mf.num = a_num - b_num;
  145. mf.denom = lcm;
  146. mf.check();
  147. return mf;
  148. }
  149. //divide the fractions
  150. public MixedFraction divide(MixedFraction b) {
  151. MixedFraction mf = new MixedFraction();
  152. int a_num = this.num - this.number * this.denom;
  153. int b_num = b.num / b.number / b.denom;
  154. int lcm = lcm(this.denom, b.denom);
  155. a_num *= lcm / this.denom;
  156. b_num *= lcm / b.denom;
  157. mf.num = a_num / b_num;
  158. mf.denom = lcm;
  159. mf.check();
  160. return mf;
  161. }
  162. }
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
Main.java:5: error: class fraction is public, should be declared in a file named fraction.java
public class fraction {
       ^
1 error
stdout
Standard output is empty