2017-03-07 50 views
0

我有一個簡單的計算器這裏有一個switch語句應該允許用戶輸入一個字符串,像這樣: * 5爲什麼不解析雙行爲正確?

運營商可以 - + /或* 的代碼添加過程中正確地執行,但是,當我減去一個值時,它會加上它,除法或相乘將導致下面列出的例外情況。

Enter an operator and a number: 
+5 
Enter an operator and a number: 
*2 
Exception in thread "main" java.lang.NumberFormatException: For input string: "*2" 
    at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2043) 
    at sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110) 
    at java.lang.Double.parseDouble(Double.java:538) 
    at Calculator.whatOperator(Calculator.java:38) 
    at Calculator.aResult(Calculator.java:29) 
    at Main.main(Main.java:30) 

我相信我沒有正確地解析雙出於某種原因,但我不確定如何做到這一點......我在想StringTokenizer的,但我該如何使用該標記者無定界符? 這裏是我的計算器類再下面是我的主類

import java.util.Scanner; 
public class Calculator { 
    private final int RESET = 0; 
    private double number = 0; 
    private double result = 0; 
    private char operator; 
    private Scanner keyboard = new Scanner(System.in); 
    public Calculator(double number) 
    { 
     this.number = number; 

    } 
    public void reset() 
    { 
     this.number = RESET; 
    } 
    public double aResult(Calculator other) 
    { 

     other.whatOperator(); 
     this.result = other.result; 
     return result; 

    } 

    public void whatOperator() 
    { 
     String operatorString = enterNumber(); 
     // the error occurs here....is there a better way to do this? 
     double theNumber = Double.parseDouble(operatorString); 
     char theOperator = operatorString.charAt(0); 
     this.operator = theOperator; 
     operatorString =""; 
     operatorString += theOperator; 

     // the switch should perform the operation 
     switch(operatorString){ 
     case "*": 
     result = getNumber() * theNumber; 
     break; 
     case "/": 
     result = getNumber()/theNumber; 
     break; 
     case "+": 
     result = getNumber() + theNumber; 
     break; 
     case "-": 
     result = getNumber() - theNumber; 
     break; 
     case "R": 
     result = RESET; 
     break; 
     case "P": 
     System.out.println("Goodbye"); 
     System.exit(0); 

    } 


} 
public double add(double secondNumber) 
{ 
    result = number + secondNumber; 
    return result; 

} 
public double divide(double secondNumber) 
{ 
    result = number/secondNumber; 
    return result; 
} 
public double multiply(double secondNumber) 
{ 
    result = number * secondNumber; 
    return result; 
} 
public void subtract(double secondNumber) 
{ 
    result = number - secondNumber; 
} 


public double getNumber() 
{ 
    return number; 
} 
public void setNumber(double number) 
{ 
    this.number = number; 
} 
    public String enterNumber() 
    { 

     System.out.println("Enter an operator and a number:"); 
     String toString = keyboard.nextLine(); 
     return toString; 
    } 

} 
public class Main { 

    public static void main (String[] args) { 
     Calculator a = new Calculator(0); 
     a.setNumber(a.aResult(a)); 
     a.setNumber(a.aResult(a)); 
     String theString = String.valueOf(a.getNumber()); 
     System.out.println(theString); 
    } 
} 
+0

需要它正或負5,它是有效的字符串,但無法評估*或/應有的價值 – Darshit

回答

1

此行是錯誤的:

double theNumber = Double.parseDouble(operatorString); 

,因爲它解析運營商的號碼的一部分。相反,使用這樣的:當你進入+/- 5

double theNumber = Double.parseDouble(operatorString.substring(1)); 
+0

這樣一個簡單的辦法!有時候最簡單的錯誤是最容易忽略的。我會盡可能接受你的答案。謝謝 – mark1092

相關問題