繁体   English   中英

区分 Scanner class 在 java 中提供的 Scanner、System.in 和 next() 方法的工作原理?

[英]distinguish the working of Scanner, System.in, and next() methods that the Scanner class provides in java?

  Scanner scanner = new Scanner(System.in);

    System.out.println("enter number :");
    int number = scanner.nextInt();
    System.out.println("Number is " + number);

让我通过 go 一步一步来解释我的理解,

Scanner scanner = new Scanner(System.in);  
  • 扫描仪是 java 内置类之一,它是我们可以使用它来读取用户输入的方式之一。

  • scanner 是我们创建的 object 的标识符。

  • 使用new ,我们创建了 object 的实例。

  • System.in帮助我们从控制台(键盘)获取输入

    System.out.println("输入号码:");

  • 打印“输入号码:”。

    int number =scanner.nextInt();

  • 从控制台(键盘)读取给定给 system.in 的输入,并将输入解析(转换)为 int 并将其存储在变量 number 中。

    System.out.println("数字为" + number);

  • 打印语句“数字是”+数字(存储在变量数字中的输入));

我认为这是我的模糊理解,我不确定我的知识。

我的问题是;

  1. 扫描仪 class 用于读取用户输入,那么 System.in 也用于读取输入? 不是吗? 这将有助于解释这两个术语之间的明确区别吗?

  2. 当我们从控制台输入(输入)输入时,它会去哪里? 到 System.in?

System.in 是否存储值?

  1. nextInt() 方法也用于读取输入? 这个怎么运作? 它是读取 System.in 已经读取的输入然后解析为 int 吗?

扫描仪读取,System.in 读取,nextInt() 读取,一切都读取? 我无法区分这些的工作原理?

System.in是从 读取,它不会自己读取。

Scanner class 有助于解析从您提供的输入源获得的输入。 在这种情况下,您已经给了它System.in ,所以它从那里读取输入。

nextInt()Scanner提供的帮助您解析输入的方法之一。 具体来说,它解析 integer。

System.in是一个InputStream ,它(默认情况下)从控制台提供用户输入。 您可以使用read直接读取它:

int someByte = System.in.read();

请注意,这会读取一个无符号字节(Java 没有无符号字节的类型,因此类型是int )。 例如,如果我在控制台中输入1 ,上面将存储 49 到someByte ,因为 49 是字符1被编码为的第一个字节。

如果您想将someByte改为 1,那么使用System.in.read显然不是很有帮助,是吗? 我们不想读取字节。 我们想要读取字节,并使用特定的编码将这些字节转换为字符,然后将字符串解析为数字。 这就是Scanner所做的。

Scanner可以获取输入 stream 并按需从中读取字节,使用默认编码将它们理解为字符,然后将字符块组合成令牌 Scanner读取内容的一种方法是调用nextInt nextInt所做的是:读取字节直到找到完整的令牌,并将其解析为 integer。

简而言之, System.in为您提供原始字节, Scanner为您提供标记,解析或其他方式。 希望这能回答您的第一个和第三个问题。

当我们从控制台输入(输入)输入时,它会去哪里? 到 System.in?

是的,在这个抽象层次上,你可以说它是 go 的第一个位置。 然后将您输入的字节传递给Scanner ,然后将它们转换为令牌,然后进行解析。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM