2016-07-05 1 views
-2

J'ai écrit un programme de calcul simple. Je veux que les utilisateurs entrent leur demande en tant que 12 + 12 et retournent la réponse. J'ai utilisé StringTokenizer, mais j'ai eu une erreur et elle ne m'affiche aucun résultat. Il y avait une mention que Calc est une superclasse et MinusCalc et PlusCalc sont des sous-classes. Est-ce que quelqu'un a une idée?Un programme avec StringTokenizer en 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!"); 

     } 

    } 

Et c'est classe MinusCalc:

public class MinusCalc extends Calc { 

@Override 
public int func(){ 

    return n1 - n2 ; 
} 

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



} 

Et c'est classe PlusCalc:

public class PlusCalc extends Calc { 

@Override 
public int func(){ 

    return n1 + n2; 
} 

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

} 

Et c'est classe 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

s'il vous plaît partager toute la trace de la pile, avec quelle ligne a causé l'erreur (mentionné dans stacktraces) – user31415

+1

Basé sur les informations que vous avez incluses, je conclus que l'erreur réside dans la composition de sandwich myrtille. Corrige cela et tout ira bien. – DwB

+0

Le nom de l'exception serait bien mais mon invité sauvage serait Integer.parseInt() en train d'analyser des signes ou des caractères d'espaces. –

Répondre

0

supposant que votre entrée est corriger ce qui suit pourrait vous aider (Si vous avez plus d'opérateurs, ajoutez simplement à la liste). Le true dans le paramètre signifie que vous voulez utiliser l'opérateur donné en tant que délimiteur ainsi qu'un opérateur, ce qui signifie qu'il sera également renvoyé en tant que jeton.

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!"); 

    } 
} 

REMARQUE: essayez d'utiliser une autre option mentionnée dans les commentaires au lieu de StringTokenizer si vous avez pas.

+0

Merci pour votre réponse correcte !! mais pouvez-vous me dire ce que trim() fait dans cette ligne? int opérande1 = Integer.parseInt (st.nextToken(). trim()); – MarAnd

+0

De rien. 'trim()' supprime les espaces autour des jetons; sinon, un nombre avec des espaces avant et après ne sera pas un nombre valide et ne peut pas être analysé. Cela signifie que «12 + 12» et «12 + 12» et «12 +» et ainsi de suite sont traités de la même manière. – ujulu