【问题标题】:distinguish the working of Scanner, System.in, and next() methods that the Scanner class provides in java?区分 Scanner 类在 java 中提供的 Scanner、System.in 和 next() 方法的工作原理?
【发布时间】:2021-07-11 02:41:07
【问题描述】:
  Scanner scanner = new Scanner(System.in);

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

让我一步一步解释我的理解,

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

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

  • 使用new,我们创建对象的一个​​实例。

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

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

  • 打印“输入号码:”。

    int number =scanner.nextInt();

  • 从console(keyboard)读取system.in的输入并将输入解析(convert)为int并将其存储在变量number中。

    System.out.println("数字是" + 数字);

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

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

我的问题是;

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

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

System.in 是否存储这些值?

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

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

【问题讨论】:

  • System.in 代表控制台,Scanner 代表可用于读取输入的东西,nextInt() 只是一种让应用程序真正停止并等待获取输入的方法。这里唯一活跃的是触发所有这一切的nextInt() 调用。

标签: java next system.in


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    int someByte = System.in.read();
    

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

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

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

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

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

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

    【讨论】:

    • 我以前从你的回答中学到了新东西,我不知道,1)所以我们从关键字输入的输入首先被 System.in 读取为字节? 2) 然后从 System.in 中,Scanner 将字节转换为字符(是 char 数据类型吗?),然后转换为令牌(令牌是文本对吗?字符串也是如此),
    • 3) nextInt() 然后读取Scanner的输入,Scanner的输入是tokens,nextInt90的作用是将tokens解析成整数?
    • @mockingbird 1) 是的 2) 是的,如果你真的深入那里,就会有chars。是的,令牌是字符串。 3)您似乎认为扫描仪和nextInt 是不同的东西。不,nextInt 是您可以要求扫描仪执行的操作 - “嘿,扫描仪,读取下一个令牌,并将其解析为 int”。 除非您告诉nextIntnextnextFloat 等,否则扫描仪不会读取任何内容
    • 是的,现在我明白了,在调用 next() 或 nextInt() 之类的方法之前,Scanner 不会做任何事情,真的非常感谢...
    • 了解 System.in,这对吗 1) 从 System.in,Scanner 获取其输入以读取。 2) System.in 直接从控制台(键盘)获取输入作为字节数据类型,并传输到 Scanner 进行读取、解析等操作。 3)所以 System.in 什么都不读,它只是在那里接收来自控制台(键盘)的输入并将其传输回扫描仪?如果我错了,请帮助我理解它
    猜你喜欢
    • 2014-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-03
    • 1970-01-01
    相关资源
    最近更新 更多