当前位置: 首页 > 知识库问答 >
问题:

System.In和Scanner对象

萧阳波
2023-03-14
public static final InputStream in

它被声明为final,所以不能更改,正如Oracle源代码中提到的,他们说“in”是“标准”输入流。此流已经打开并准备提供输入数据。通常,此流对应于键盘输入或主机环境或用户指定的另一输入源。

这到底是什么意思?.

当我编写以下代码时:

共有1个答案

詹正浩
2023-03-14

System.in是一个BufferedInputStream,这样的stream可以是任何输入流(例如网络套接字或文件),也可以是标准输入通道stdin

stdin是您在命令行中键入的内容,因此显然,它不会显示任何内容。

当您创建一个扫描器时,如您的问题所示,您将标准输入通道提供给该扫描器,但是扫描器不会执行任何操作,直到它被要求执行。扫描器是一个包装器:一个使从stdin解析输入变得更容易(更方便)的构造。它没有提供额外的功能,因为您可以自己完成扫描器所做的一切,但是如果您想解析stdin中的整数,使用扫描器要容易得多。

Scanner sc = new Scanner(System.in);
int val = sc.nextInt();
System.out.println(2*val);

它将一直等到您输入一行,将其解析为整数,并在标准输出通道(stdout)上打印输入值的双倍值。

几个结束语:

system.in不是final,您可以使用system.setin将另一个输入流设置为标准输入字符串。例如,文件或网络套接字。默认的system.in还可以从例如文件或管道中获取输入,如果您将程序调用为java-jar program.jar

 类似资料:
  • 问题内容: 为什么我在递归方法中遇到无限循环,而没有机会输入任何符号来破坏它? 如果您尝试创建错误(将字符串值输入键,然后尝试向其添加数字),则您将在控制台中获得无限的“错误”文本,而不是在第一次错误后,程序应再次询问该数字和然后才决定要做什么。 问题答案: 如果失败,则抛出异常,但不使用无效数据。从文档中: 当扫描程序抛出时,扫描程序将不会传递导致异常的令牌,因此可以通过其他方法检索或跳过该令牌

  • 问题内容: 使用导致 线程“主”中的异常java.util.NoSuchElementException 当我尝试调试时说 变量信息不可用,源代码编译时没有-g选项。 并显示以下代码 我的使用此行的方法之一: 问题答案: 您即将关闭(全局变量)。 请 不要这样做。到处都有 保证将是(d)。一旦它的(d)你可以从它再次不读(或你得到你提到的)。另外,您可以使用调试符号进行编译(或使用IDE的内置调试

  • 扫描器是我们创建的对象的标识符。 使用,我们创建对象的一个实例。 帮助我们从控制台(键盘)获取输入 system.out.println(“Enter number:”); 打印“输入数字:”。 int number=scanner.nextint(); 从控制台(键盘)读取给System.in的输入,并将输入解析(转换)为int并存储在变量Number中。 System.out.println(

  • 问题内容: 我注意到,如果关闭,我将无法再从键盘插入输入,因为已经关闭了。无论如何,我可以保留(删除文件时需要它),然后从键盘添加更多输入吗? 问题答案: 看起来您需要: http://commons.apache.org/io/apidocs/org/apache/commons/io/input/CloseShieldInputStream.html 在制作读者之前,先将System.in环绕

  • 问题内容: 您能否详细解释上面的代码在做什么?我不太了解它是如何工作的,以及以后如何执行此语句,它如何链接到我: 问题答案: 好了,让我们详细说明一下该类。 这是一个标准的Oracle类,您可以通过调用来使用。 因此,让我们为该类做一个基本的例子: 现在,当您调用时,将创建该类的新对象(因此,将创建新的“ Scanner”)并将其存储在变量中。同时,您使用参数调用类的(所谓的)构造函数。这意味着它

  • 我正在研究为什么scan.nextInt()从第二次迭代开始使用前一个整数。任何人都可以理解正在发生的事情,并解释“扫描仪不会超过任何输入”的确切含义吗? 请忽略无限循环。这只是为了测试目的。 示例: 输入新数据:0 0 数据输入 再次输入数据:1 执行 输入新数据:1