2016-09-09 16 views
0

私の目標も単純な電卓です。私はすでに2つの値をとり、加算、減算などを行うことができるものを作っていますが、例のように2 + 33 * 4 + 5/2のようなユーザー入力を読み取ることもできます。私はプログラミングの導入コースを取っています。ユーザー入力を2つの配列、ダブルと文字列にソート

したがって、ユーザー入力は、いくつの値といくつの操作(優先順位のルールが考慮されていないか)を決定します。

私はおそらく、if elseをifループでwhileループを使って2つの配列に直接入力することができると考えました。擬似コードでは、

while (input is not quit) 
if input is a value, put in value array 
if input is symbol, put in symbol array 

これまでのところ私はこれ書いた:

public static void main(String[] args){ 
    Scanner sc = new Scanner(System.in); 
    String input = ""; 
    Double[] values = new Double[10]; 
    String[] symbols = new String[10]; 
    int v = 0; 
    int s = 0; 

    while (!input.equals("q")) { 
     input = sc.nextLine(); 
     if (sc.hasNextDouble()) { 
      values[v] = Double.parseDouble(input); 
      v++; 
     } else { 
      symbols[s] = input; 
      s++; 
     } 
    } 
    System.out.println(Arrays.toString(values)); 
    System.out.println(Arrays.toString(symbols)); 
} 

テスト実行は、このようなものです:私は一種の私はQを押してあまりにも必要とどのように見ることができます

2 
2 
2 
a 
b 
s 
q 
q 
[2.0, 2.0, null, null, null, null, null, null, null, null] 
[2, a, b, s, q, null, null, null, null, null] 

なぜなら、2つのうちの1つが文字列配列に入っている理由は分かりません。

文字を入力して2回入力すると例外が発生し、プログラムが終了します。

返信いただきありがとうございます。

+0

これはJavaですか?言語タグを追加する必要があります。 – hatchet

+0

ああ、申し訳ありません!サイトに新しい:) – IMJensen

答えて

0

入力を処理する方法についてのあなたのテストは、次の入力を先読みして決定しますので、inputの値とテストの位相が合っていません。

bool done = false; 
while (!done) { 
    if (sc.hasNextDouble()) { 
     values[v] = Double.parseDouble(sc.nextLine()); 
     v++; 
    } else { 
     symbols[s] = sc.nextLine(); 
     if (symbols[s].equals("q")) done = true; 
     s++; 
    } 
} 

私はあなたがあなたの配列に「q」をキャプチャしたい理由はわからないんだけど、それはあなたのコードをどうやったのかなので、私はここにもそれをやった:私はこのようなものをお勧めしたいです。 elseブロックを少し変更することで、配列からそれを保持することができます。

+0

ありがとうございました!スキャナは興味深いものです。 Qは、シンボルの配列に格納されることになって、私は次のようにコードを変更されません。 \t \t '(やった!){ \t \t \t(sc.hasNextDouble()){ \t \t \t場合はしばらく\t verdier [v] = Double.parseDouble(sc.nextLine()); \t \t \t \t v ++;他 \t \t \t} { \t \t \t \t記号[S] = sc.nextLine()IF(sc.hasNext( "Q")!)。 \t \t \t \ts ++; \t \t \t}他{ \t \t \t \t = trueを行います。 \t \t \t} \t \t} ' そして、それは、それがすることになっていると同じように動作します。再度、感謝します :) ! – IMJensen

関連する問題