用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);
}
}
答案 0 :(得分:5)
Scanner var = new Scanner(System.in);
此时不会读取值。假设这样打开控制台和程序之间的流(或)管道。
fnum = var.nextDouble();
告诉JVM,现在从名为double
的流(java术语,引用)获取下一个可用的var
值,并将该值存储到fnum
。
答案 1 :(得分:4)
var
是对Scanner
object的引用,它有助于抽象读取来自源的标记化输入(在本例中为默认输入流System.in
)。
对.nextDouble()
的调用等待输入值(例如从提示输入或通过管道输入到标准输入)。输入后,该值将存储在指定的属性中(即fnum
或snum
)。
如果该值不可解析为double
,则会抛出InputMismatchException
。
以下是您的来源的简要注释版本,它解释了正在发生的事情:
// 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();
...
阅读class documentation for Scanner以帮助提供有关扫描仪是什么以及它如何工作的一些背景信息可能没什么坏处。
答案 2 :(得分:2)
调用var.nextDouble()
会导致从输入中读取下一个double
值并返回其值。然后,您需要将值存储在某个位置(或者不是,如果您只想将其丢弃)。没有地方你“告诉扫描仪存储变量的位置”。
答案 3 :(得分:2)
在“中级”知道C ++的人应该知道:cin
是一个全局变量,>>
是伪装成运算符的方法调用,而“变量”是一个该方法调用的引用参数。
在Java中,没有不合格的全局变量,方法调用遵循object.method(params)
格式,并且没有传递引用。
答案 4 :(得分:1)
nextDouble()是类Scanner的一种方法,它返回下一个扫描的double。基本上,类Scanner正在为你做cin类型的东西,但你没有看到它的内部工作原理。这就好像你用C ++编写一个类来为你处理cin,现在你只是在使用那个类。
答案 5 :(得分:1)
作为初学者,你可能会感到困惑。首先是我们使用scanner
的原因?当程序想要获得scanner class
时,我们会使用user input
。就像程序问你“你叫什么名字?”你输入彼得然后程序可以回答“Hello Peter
!”。在那里输入你的名字,这是一个字符串值,
当您使用扫描仪时,您将获得用户输入,并且您需要变量来存储这些输入。你可以说“名字”是变量。所以你输入的名字将存储在名字变量中。现在系统如何采取你的特定答案?因为我们使用了一些方法。为一个
string
我们将使用var.next()
,
double
- > var.nextDouble()
,
int
----> nextInt()
,
其中var
位于Scanner var = new Scanner(System.in);
扫描程序引用变量名称中。
在您的示例中,您希望将双倍值作为用户输入,这就是为什么您要说JVM
来获取下一个双倍值。