2016-07-05 17 views
-2

Ich schrieb ein einfaches Berechnungsprogramm. Ich möchte, dass Benutzer ihre Anfrage als 12 + 12 eingeben und die Antwort zurücksenden. Ich habe StringTokenizer verwendet, aber ich habe einen Fehler erhalten und er zeigt mir kein Ergebnis. Es wurde erwähnt, dass Calc eine Oberklasse ist und MinusCalc und PlusCalc Unterklassen sind. Hat jemand eine Idee?Ein Programm mit StringTokenizer in Java

void inputLineData() { // This is just the function that use for this case         

    System.out.println(" Plz enter your all numbers"); 
    String strAll = key.next(); 

    StringTokenizer st = new StringTokenizer(strAll); 
    int n1 = Integer.parseInt(st.nextToken()); 
    String str = st.nextToken(); 
    int n2 = Integer.parseInt(st.nextToken()); 




    switch (str.charAt(0)) { 
     case '+': 
      PlusCalc P = new PlusCalc(n1, n2); 
      listCalc[indexCalc] = P; 
      indexCalc++; 

      break; 
     case '-': 
      MinusCalc M = new MinusCalc(n1, n2); 
      listCalc[indexCalc] = M; 
      indexCalc++; 

      break; 

     default: 
      System.out.println("Error!"); 

     } 

    } 

Und das ist MinusCalc Klasse:

public class MinusCalc extends Calc { 

@Override 
public int func(){ 

    return n1 - n2 ; 
} 

public MinusCalc(int n1, int n2) { 
    super(n1, n2); 
    } 



} 

Und das ist PlusCalc Klasse:

public class PlusCalc extends Calc { 

@Override 
public int func(){ 

    return n1 + n2; 
} 

public PlusCalc(int n1, int n2) { 
    super(n1, n2); 
    } 

} 

Und das ist Klasse Calc:

public abstract class Calc { 

    public Calc(int n1, int n2) { // constructor with parameters!! 
    this.n1 = n1; 
    this.n2 = n2; 
} 

int n1,n2; 
public abstract int func(); 

} 
+0

Bitte teilen Sie den gesamten Stack-Trace, zusammen mit welcher Zeile den Fehler verursacht (in Stacktraces erwähnt) – user31415

+1

Basierend auf den Informationen, die Sie enthalten, schließe ich, dass der Fehler in der Blueberry Sandwich Compositing liegt. Fix das und alles wird gut. – DwB

+0

Der Name der Ausnahme wäre nett, aber mein wilder Gast würde Integer.parseInt() sein, Zeichen oder Leerzeichen zu analysieren. –

Antwort

0

Angenommen, Ihre Eingabe ist Korrigieren Sie das folgende könnte Ihnen helfen (Wenn Sie mehrere Operatoren haben, fügen Sie sie einfach an die Liste an). Der Parameter true im Parameter bedeutet, dass Sie den angegebenen Operator sowohl als Trennzeichen als auch als Operator verwenden möchten. Dies bedeutet, dass er auch als Token zurückgegeben wird.

StringTokenizer st = new StringTokenizer(strAll, "+-*/", true); 
if (st.countTokens() == 3) { 
    int operand1 = Integer.parseInt(st.nextToken().trim()); 
    String operator = st.nextToken(); 
    int operand2 = Integer.parseInt(st.nextToken().trim()); 

    switch (operator.charAt(0)) { 
     case '+': 
      PlusCalc P = new PlusCalc(operand1, operand2); 
      listCalc[indexCalc] = P; 
      indexCalc++; 

      break; 
     case '-': 
      MinusCalc M = new MinusCalc(operand1, operand2); 
      listCalc[indexCalc] = M; 
      indexCalc++; 

      break; 

     default: 
      System.out.println("Error!"); 

    } 
} 

Hinweis: versuchen, eine andere Option in den Kommentaren statt StringTokenizer erwähnt zu verwenden, wenn Sie nicht zu haben.

+0

Danke für Ihre richtige Antwort !! Aber kannst du mir sagen, was trim() in dieser Zeile macht? int operand1 = Ganzzahl.parseInt (st.nextToken(). trim()); – MarAnd

+0

Gern geschehen. 'trim()' entfernt Leerzeichen um die Tokens herum; ansonsten ist eine Zahl mit Leerzeichen davor und danach keine gültige Nummer und kann nicht geparst werden. Das bedeutet "12 + 12" und "12 + 12" und "12 +" usw. werden auf die gleiche Weise behandelt. – ujulu