2016-05-28 15 views
0

私は電卓をC++で作っています。私はそれをJavaのように鏡のように再現しようとしています。Javaで一度に異なる変数型を入力する

それはcout << a << op << b << "=" << a+b << endl;ますop = '+'場合instaceのためのサイクルであれば、そうで入れて2つのオペランドとcharの2重の変数(double adouble b)(char op)がありました。

コンソールのプロンプトに12+2と書いて、12+2=14を出力として表示することができます。

は今、Javaで私はそれを1行に1つずつ持っている:

Scanner Scin = new Scanner(System.in); 
     System.out.println("OPERATION>"); 
     a = Scin.nextDouble(); 
     op = Scin.next().charAt(0); 
     b = Scin.nextDouble(); 

ので、私は毎回返す値とプレスを記述する必要があります。どのようにしてC++のように一度にすべてを入力することができますか?また、1行のコードで行うことができますか?前もって感謝します。

+1

あなたがそれぞれの時間を返し押す必要はありません、あなたが入力し '100 + 200することができます' –

+0

注:Javaのコーディング規約によれば、変数は大文字で始めるべきではなく、小文字で始めるべきです。したがって、スキャナ変数は' scIn'または 'scin'でなければなりません(さらに良い' inputScanner' - 名前は意味を持つ)。大文字で始まる名前は型(クラス、インタフェース、列挙型)です。 – RealSkeptic

答えて

3

Scannerを使用して複数の変数を同時に読み取ることはできません。一度に1つずつ読む必要があります。しかし、毎回入力したり、スペースを入力したりすることなく、入力が行われるようにする良い方法があります。別の区切り文字を設定してください!デフォルトの区切り文字は空白(改行を含む)ですが、正規表現の単語境界\bに設定することもできます。

Scanner in = new Scanner(System.in).useDelimiter("\\b|\\s+"); 

今、あなたは12+2で読むことができますし、それはあなたがそれらをしたいnext通話を分割しますか、Enterキーを押し続けることができます、またはあなたが値の間にスペースを置くことができます。あなたの選択:D

後で区切り記号を通常に戻すには、in.reset()を使用します。

編集:パターンを使用し、小数点で入力を分割するから、ワード境界を維持するために:

(?<!\\.)\\b(?!\\.)|\\s+ 
+0

ありがとうございました!今私はJavaの神秘的な力を私の手に持っています! –

+0

Err ...実際はそうではなく、小数点以下の数字を印刷しません。 :D –

+0

この場合、正規表現は単語境界が小数点以下でないことを確認する必要があります。私は私の答えを更新しました。 – 4castle

関連する問題