2017-03-07 5 views
0

Ich habe einen einfachen Rechner hier mit einer switch-Anweisung, die den Benutzer wie ein Zeichenfolge eingeben, so lassen soll: * 5Warum verhält sich geparste Double nicht korrekt?

der Betreiber sein kann - Der Code während der Zugabe führt jedoch korrekt +/oder *, Wenn ich einen Wert subtrahiere, addiert er ihn, und durch Dividieren oder Multiplizieren ergeben sich die unten aufgeführten Ausnahmen.

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) 

Ich glaube, ich bin nicht die doppelte richtig aus irgendeinem Grund das Parsen aber bin nicht sicher, wie dies zu tun ... Ich dachte StringTokenizer aber wie kann ich das tokenizer ohne Trennzeichen? Hier ist mein Rechner Klasse und unten, dass meine Hauptklasse ist

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

Wenn Sie +/- 5 geben Sie nimmt es positiv oder negativ 5, die gültige Zeichenfolge ist aber nicht in der Lage * oder/zum richtigen Wert – Darshit

Antwort

1

Diese Zeile ist falsch:

double theNumber = Double.parseDouble(operatorString); 

, weil es den Bediener als Teil der Nummer analysiert. Verwenden Sie stattdessen dies:

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

solch eine einfache Lösung zu bewerten! Manchmal sind die einfachsten Fehler am leichtesten zu übersehen. Wird deine Antwort akzeptieren, wenn ich kann. Vielen Dank – mark1092

Verwandte Themen