2014-10-29 95 views
-1

我是Java编程新手。我试图做一个分数计算器,但是当我尝试运行该程序时,它给了我一个错误。这个错误与Switch语句有关,但我不知道发生了什么。在Java中使用Switch的计算器

public static void main(String[] args) { 
     Scanner console = new Scanner(System.in); 
     System.out.println("Welcome to My FracCalc"); 
     boolean continueProcessing = true; 
     while (continueProcessing) { 
      System.out.println("Type an expression and press <enter>"); 

      String Operand1 = console.next(); 
      if (Operand1.equals("quit")) { 
       continueProcessing = false; 
       System.out.println("Good bye!"); 
       break; 
      } else { 
       Operand1 = parseFullNumber(Operand1); 
      } 

      String Operator = console.next(); 
      if (Operator.equals("quit")) { 
       continueProcessing = false; 
       System.out.println("Good bye!"); 
       break; 
      } else if (Operator.equals("+") || Operator.equals("-") || Operator.equals("/") || Operator.equals("*")) { 

      } else { 
       throw new ArithmeticException(); 
      } 

      String Operand2 = console.next(); 
      if (Operand2.equals("quit")) { 
       continueProcessing = false; 
       System.out.println("Good bye!"); 
       break; 
      } else { 
       Operand2 = parseFullNumber(Operand2); 
      } 


      System.out.println(Operand1 + " " + Operator + " " + Operand2); 
      //System.out.println("First Fraction is: " + Operand1); 
      //System.out.println("Operator is: " + Operator); 
      //System.out.println("Second Fraction is: " + Operand2); 


      float answer; 
      System.out.println(Operator); 
      switch (Operator) { 
       case "+": 
        answer = Operand1 + Operand2; 
        break; 

       case "-": 
        answer = Operand1 - Operand2; 
        break; 

       case "*": 
        answer = Operand1 * Operand2; 
        break; 

       case "/": 
        answer = Operand1/Operand2; 
        break; 

     } 
    } 
} 

    public static String parseFullNumber(String input) { 
     int wholeNumber = 0; 
     int numerator = 0; 
     int denominator = 0; 
     ; 
     int underscoreId = input.indexOf('_'); 
     int slashId = input.indexOf('/'); 

     // Check for underscore "_" // 
     if (underscoreId > -1) { 
      wholeNumber = Integer.parseInt(input.substring(0, underscoreId)); 
      numerator = Integer.parseInt(input.substring(underscoreId + 1, slashId)); 
      denominator = Integer.parseInt(input.substring(slashId + 1, input.length())); 
     } else { 
      if (slashId > -1) { 
       // no underscore but there is a slash // 
       numerator = Integer.parseInt(input.substring(0, slashId)); 
       denominator = Integer.parseInt(input.substring(slashId + 1, input.length())); 
      } else { 
       // there is no underscore or slash // 
       wholeNumber = Integer.parseInt(input); 
      } 
     } 

     return simplify(wholeNumber, numerator, denominator); 
    } 

    //simplifying fractions // 
    public static String simplify(int wholeNumber, int numerator, int denominator) { 
     // absolute values // 
     int absNumerator = Math.abs(numerator); 

     // factor if applicable // 
     if (absNumerator > 1) { 
      int commonFactor = 1; 
      for (int i = 2; i < Math.min(absNumerator, denominator); i++) { 
       if (numerator % i == 0 && denominator % i == 0) { 
        commonFactor = i; 
       } 
      } 
      numerator /= commonFactor; 
      denominator /= commonFactor; 
     } 

     // reduce if applicable // 
     if (absNumerator > denominator) { 
      int reduction = numerator/denominator; 
      if (wholeNumber >= 0) { 
       wholeNumber += reduction; 
      } else { 
       wholeNumber -= reduction; 
      } 
      numerator %= denominator; 
     } 

     // prints // 
     if (wholeNumber != 0) { 
      if (numerator != 0) { 
       return wholeNumber + "_" + numerator + "/" + denominator; 
      } else { 
       return String.valueOf(wholeNumber); 
      } 
     } else { 
      if (numerator != 0) { 
       return numerator + "/" + denominator; 
      } else { 
       return String.valueOf(0); 
      } 
     } 
    } 
} 

这是我得到的错误:

Exception in thread "main" java.lang.Error: 
    Unresolved compilation problems: 
      Type mismatch: 
       cannot convert from String to float The operator - is undefined for the argument type(s) java.lang.String, java.lang.String 
       The operator * is undefined for the argument type(s) java.lang.String, java.lang.String 
       The operator/is undefined for the argument type(s) java.lang.String, java.lang.String 
        at FracCalcApp.main(FracCalcApp.java:53) 
+1

什么是错误? – ipavl 2014-10-29 02:36:31

+0

开关语句存在编译时错误 – Strategiger 2014-10-29 02:37:22

+0

您在我认为的switch语句结尾缺少'}'。但发布完整的错误逐字更有用。 – ipavl 2014-10-29 02:37:59

回答

3

Operand1Operand2String(S)。在执行算术之前,您需要解析它们。类似的,

double answer; 
System.out.println(Operator); 
switch (Operator) { 
case "+": 
    answer = Double.valueOf(Operand1) + Double.valueOf(Operand2); 
    break; 
case "-": 
    answer = Double.valueOf(Operand1) - Double.valueOf(Operand2); 
    break; 
case "*": 
    answer = Double.valueOf(Operand1) * Double.valueOf(Operand2); 
    break; 
case "/": 
    answer = Double.valueOf(Operand1)/Double.valueOf(Operand2); 
    break; 
} 

最后,按照惯例,Java变量应该以小写字母开头; operand1,operand2operator

+0

谢谢,这真的很有帮助。此外,我通过我的代码和小写所有变量。 – Strategiger 2014-10-29 02:49:16

+0

另一个错误:键入的表达,并按下 1_1/2 + 1_1/2 1_1/2 + 1_1/2 + 异常在线程 “主” java.lang.NumberFormatException:对于输入字符串: “1_1/2” \t在sun.misc.FloatingDecimal.readJavaFormatString(来源不明) \t在java.lang.Double.valueOf(来源不明) \t在FracCalcApp.main(FracCalcApp.java:53) – Strategiger 2014-10-29 02:50:41

+0

正确的。 1_1/2不是浮点数。试试'1.5' – 2014-10-29 02:51:21