2016-07-05 82 views
-2

我写了一个简单的计算程序。我希望用户输入12 + 12的请求并返回答案。我使用了StringTokenizer,但是出现了一个错误,它没有显示任何结果。有人提到Calc是超类,MinusCalc和PlusCalc是子类。有人有什么主意吗?用Java中的StringTokenizer编写程序

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

     } 

    } 

这是MinusCalc类:

public class MinusCalc extends Calc { 

@Override 
public int func(){ 

    return n1 - n2 ; 
} 

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



} 

这是PlusCalc类:

public class PlusCalc extends Calc { 

@Override 
public int func(){ 

    return n1 + n2; 
} 

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

} 

这是计算器类:

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

请分享整个堆栈跟踪,以及什么行造成的错误(在堆栈跟踪中提到) – user31415

+1

根据您所包含的信息我得出结论,错误在于蓝莓三明治合成。解决这个问题,一切都会好的。 – DwB

+0

异常的名称会很好,但我的野生客人将是Integer.parseInt()解析符号或空白字符。 –

回答

0

假设你输入更正以下内容可能对你有所帮助(如果你有更多的操作员只是追加到列表中)。参数中的true表示您希望将给定的运算符用作分隔符以及运算符,这意味着它也将作为令牌返回。

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

    } 
} 

注意:如果试试你有没有使用的意见,而不是StringTokenizer提到的另一种选择。

+0

感谢您的正确答案!但你能告诉我什么trim()在这一行吗? int operand1 = Integer.parseInt(st.nextToken()。trim()); – MarAnd

+0

不客气。 'trim()'去除令牌周围的空间;否则前后有空格的数字将不是有效数字,也不能被解析。这意味着'12 + 12'和'12 + 12'和'12 +'等都是以相同的方式处理。 – ujulu