2016-07-05 108 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