1

C ++で数か月プログラミングし、中級レベルに達した後、Javaの学習を開始することにしました。スキャナー変数がどのように機能するかについて頭を悩ませています。C ++では、「cin >>」は、入力が何であれ、以前に宣言された変数に格納されるという点で非常に単純でした。しかし、Javaでは変数自体はスキャナーですか?それはどのように機能しますか?また、変数を格納する場所をスキャナーに指示した後、「。nextDouble」を使用する目的は何ですか?私はチュートリアルからそれを学びました、そしてここに私のコードがあります。

import java.util.Scanner;
class calculator {
 public static void main(String args[]) {
     Scanner var = new Scanner(System.in);
     double fnum, snum, answer;
     System.out.println("Enter first number: ");
     fnum = var.nextDouble();
     System.out.println("Enter second number: ");
     snum = var.nextDouble();
     answer = fnum+snum;
     System.out.println(answer);


 }
     }
4

6 に答える 6

5
  Scanner var = new Scanner(System.in);

この時点では、値は読み取られません。このように、コンソールとプログラムの間のストリーム (または) パイプを開くとします。

fnum = var.nextDouble();

JVM に、 (Java 用語、参照)doubleという名前のストリームから次に使用可能な値を取得し、varその値を に格納するように指示しますfnum

于 2012-12-31T19:33:46.090 に答える
4

varソース (この場合はデフォルトの入力ストリーム) からのトークン化された入力の読み取りを抽象化するのに役立つScanner オブジェクトへの参照ですSystem.in

への呼び出し.nextDouble()は、値が入力されるのを待ちます (たとえば、プロンプトから、または stdin にパイプされます)。入力すると、値は割り当てられたプロパティ (fnumまたはsnum) に格納されます。

値が として解析できない場合は、doubleInputMismatchExceptionスローされます。

何が起こっているのかを説明するソースの簡単な注釈付きバージョンを次に示します。

 // Create a new Scanner object that will read input from System.in (stdin).
 Scanner var = new Scanner(System.in);

 // Declare some variables. The scanner hasn't done anything significant yet.
 double fnum, snum, answer;

 // Print a line to stdout.
 System.out.println("Enter first number: ");

 // Block until the scanner (i.e. stdin) receives a token. By default, the
 // Scanner will use whitespace to tokenize anything that comes in on
 // System.in. nextDouble() will try to parse the first available token
 // into a double. If the parsing succeeds, assign the parsed value to fnum.
 fnum = var.nextDouble();

 // Same thing as above, but for snum.
 System.out.println("Enter second number: ");
 snum = var.nextDouble();

 ...

Scanner のクラスのドキュメントを読んで、 Scanner とは何か、どのように機能するかについてのコンテキストを提供することは問題ありません。

于 2012-12-31T19:33:40.690 に答える
2

「中級レベル」でC++を知っている人が知っておくべきことcinは、グローバル変数で>>あり、演算子を装ったメソッド呼び出しであり、「変数」はそのメソッド呼び出しの参照パラメーターです。

Javaには、修飾されていないグローバル変数はなく、メソッド呼び出しはその形式に従い、object.method(params)参照渡しはありません。

于 2012-12-31T20:42:25.063 に答える
2

を呼び出すと、入力からvar.nextDouble()次のdouble値が読み取られ、その値が返されます。次に、値をどこかに保存する必要があります(単に破棄したい場合は保存しないでください)。「変数を格納する場所をスキャナーに指示する」場所はありません。

于 2012-12-31T19:34:21.643 に答える
1

nextDouble() は、次にスキャンされた double を返すクラス Scanner のメソッドです。基本的に、クラス Scanner は cin タイプの処理を行っていますが、その内部の仕組みはわかりません。cin を処理するクラスを C++ で作成し、そのクラスを使用しているようなものです。

于 2012-12-31T19:33:34.190 に答える