2016-07-05 14 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); 
    } 

} 

そして、これは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

エラーの原因となった行(スタックトレースに記載されているもの)と共にスタックトレース全体を共有してください – user31415

+1

あなたが含まれている情報に基づいて、エラーがブルーベリーサンドイッチ合成にあると判断します。それを修正し、すべてがうまくいくでしょう。 – DwB

+0

例外の名前は素晴らしいですが、私のワイルドゲストは、Signerまたは空白文字を解析する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

関連する問題