使用scanner.nextLine() [重复]

2023-12-13

我在尝试使用 java.util.Scanner 中的 nextLine() 方法时遇到了麻烦。

这是我尝试过的:

import java.util.Scanner;

class TestRevised {
    public void menu() {
        Scanner scanner = new Scanner(System.in);

        System.out.print("Enter a sentence:\t");
        String sentence = scanner.nextLine();

        System.out.print("Enter an index:\t");
        int index = scanner.nextInt();

        System.out.println("\nYour sentence:\t" + sentence);
        System.out.println("Your index:\t" + index);
    }
}

示例#1:这个例子按预期工作。线路String sentence = scanner.nextLine();在继续之前等待输入System.out.print("Enter an index:\t");.

这会产生输出:

Enter a sentence:   Hello.
Enter an index: 0

Your sentence:  Hello.
Your index: 0

// Example #2
import java.util.Scanner;

class Test {
    public void menu() {
        Scanner scanner = new Scanner(System.in);

        while (true) {
            System.out.println("\nMenu Options\n");
            System.out.println("(1) - do this");
            System.out.println("(2) - quit");

            System.out.print("Please enter your selection:\t");
            int selection = scanner.nextInt();

            if (selection == 1) {
                System.out.print("Enter a sentence:\t");
                String sentence = scanner.nextLine();

                System.out.print("Enter an index:\t");
                int index = scanner.nextInt();

                System.out.println("\nYour sentence:\t" + sentence);
                System.out.println("Your index:\t" + index);
            }
            else if (selection == 2) {
                break;
            }
        }
    }
}

示例#2:这个例子没有按预期工作。此示例使用 while 循环和 if - else 结构来允许用户选择要执行的操作。一旦程序到达String sentence = scanner.nextLine();,它不会等待输入,而是执行该行System.out.print("Enter an index:\t");.

这会产生输出:

Menu Options

(1) - do this
(2) - quit

Please enter your selection:    1
Enter a sentence:   Enter an index: 

这使得无法输入句子。


为什么示例 #2 没有按预期工作? Ex 之间的唯一区别。 1和2就是Ex。 2 有一个 while 循环和一个 if-else 结构。我不明白为什么这会影响 Scanner.nextInt() 的行为。


我认为你的问题是

int selection = scanner.nextInt();

仅读取数字,而不读取行尾或数字后面的任何内容。当你声明

String sentence = scanner.nextLine();

这会读取带有数字的行的其余部分(我怀疑数字后面没有任何内容)

尝试放置一个scanner.nextLine();如果您打算忽略该行的其余部分,请在每个 nextInt() 之后。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用scanner.nextLine() [重复] 的相关文章

随机推荐

  • 使用java提取全链接

    我的目标是在从链接读取 href 属性时始终获得相同的字符串 在我的例子中是 URI 例子 假设一个 html 文件有很多链接 比如 a href index html gt 但基域是http www domainname com inde
  • Android Firebase - setPersistenceEnabled(true) 导致应用程序崩溃

    所以我只是尝试使用 Firebase 从实时数据库更新活动的工具栏标签 我收到以下错误 12 21 00 25 19 890 10295 10295 com xlr8labs FirebaseAuth E AndroidRuntime FA
  • C++ 字符串类可以进行指针算术吗?

    在用 C 编程了一些之后 我决定直接转向 C 起初 我对字符串类的存在以及能够将字符串视为整个单元而不是字符数组感到满意 但我很快发现 C 风格字符串的优点是可以让程序使用指针算术逐个字符地遍历它 并执行所需的逻辑操作 我现在发现自己处于需
  • 在 Linux 中使用系统调用 READ 读取 STDIN:未使用的输入被发送到 bash

    以下程序 64 位 YASM 从标准输入读取 4 个字节并退出 section data buf db Just allocate 16 bytes for string section text global start start mo
  • Angular - 是什么触发了 2 路数据绑定的摘要周期?

    AngularJS如何实现2路数据绑定 视图到模型的更新是可以理解的 即它可以通过 JS 监听器来实现 但我想了解模型到视图的更新 由于Angular模型的核心是js变量 那么Angular如何监听js变量的变化呢 我知道每个模型都有一个手
  • 回归分析未显示摘要

    以下是我的数据 gt x day sum 1 2015 04 14 129 2 2015 04 15 129 3 2015 04 16 129 4 2015 04 17 899 5 2015 04 18 899 6 2015 04 19 8
  • 在 MySQL 触发器中使用预准备语句的替代方案

    我正在尝试使用以下代码创建一个 MySQL Before Insert 触发器 如果 我能找到一种方法来执行触发器生成的准备好的语句 它将执行我想要的操作 是否有其他方法可以从触发器内执行准备好的语句 谢谢 BEGIN SET CrntRc
  • 同步数组(针对点赞/关注者)最佳实践 [Firebase Swift]

    我正在尝试使用 Swift 和 Firebase 创建一个基本的以下算法 我当前的实现如下 static func follow user FIRUser userToFollow FIRUser database child users
  • onClick 不会渲染新的反应组件。

    我是反应世界的新手 我有这样的台词
  • 使用 Bazel 离线构建 C++ 项目(无需互联网连接)

    我尝试使用此命令从 Bazel 主页 入门 构建 Bazel C 构建教程 但没有任何互联网连接 bazel build main hello world Jenkins 服务器不会与互联网有任何连接 因此我无法进行预取或类似操作 有没有办
  • pthreads 和 C++

    我正在使用 C 和 pthreads 到目前为止一切顺利 如果它是静态的 我可以访问一个类成员函数 并且我读到 如果我将 this 作为 pthread create 的参数传递 我可以访问普通的类成员函数 因为 c 在幕后这样做 但我的问
  • .Net 中的 Oracle DataReader 存在重大性能问题

    我有一些 Oracle 过程 它们生成 返回大量数据 我需要将这些数据写入文件 我目前正在尝试使用数据读取器来完成 它似乎工作正常 我已经成功生成了一个 479mb 的文件 没有任何问题 从我检索dataReader到完成文件只用了不到4分
  • 尝试从 UDF 执行 Spark sql 查询

    我正在尝试使用 scala 在 Spark 框架中编写一个内联函数 它将接受字符串输入 执行 sql 语句并返回一个字符串值 val testfunc String gt String arg1 String gt val k sqlCon
  • 如何在 Windows 批处理脚本中检查文件的大小?

    我想要一个批处理文件来检查filesize是一个文件的 如果它大于 somany kbytes 它应该用 GOTO 重定向到其他地方 Example check for filesize IF file filesize thing Big
  • 未定义的偏移 PHP 错误,数组已定义

    此处出现未定义偏移错误 显然来自 newval 数组 请注意 exp 标记不是 PHP 而只是我的 CMS 系统的 SQL 查询 它为我创建了 bags 数组
  • android mmap 失败:参数无效(errno 22)

    我正在移植 编译androidvnc服务器对于我的 Android 设备 但是当我运行它 以 root 身份 时 我不断收到 mmap 错误 有问题的代码如下所示 Android does not use dev fb0 define FB
  • Javascript date toLocaleString 是否考虑 DST?

    我已经设置了 UTC 截止日期 如下所示 我想知道 toLocaleString 方法到底会在用户的本地计算机上对其执行什么操作 例如 如果他们位于认可夏令时的时区 它会考虑夏令时吗 或者我是否需要插入额外的代码来检查用户所在位置 然后修复
  • 是否可以同时执行 if --- else 控制语句的 if 和 else 部分? [复制]

    这个问题在这里已经有答案了 可能的重复 同时执行 if 和 else 块 是否可以设置一些条件 以便 if else 控制语句中的 if 和 else 部分都可以在没有任何警告或错误的情况下执行 不使用 Yes by forking if
  • 如何使精灵指向鼠标。 XNA C#

    如果你看一下这张图链接文本 我需要通过仅知道直角三角形所有边的长度来找到角 A 我不知道三角函数 需要一些帮助 您的帖子实际上有两个问题 如何使精灵指向鼠标 XNA C 您必须计算精灵位置和鼠标位置之间的方向 这可以使用三角函数来完成 在本
  • 使用scanner.nextLine() [重复]

    这个问题在这里已经有答案了 我在尝试使用 java util Scanner 中的 nextLine 方法时遇到了麻烦 这是我尝试过的 import java util Scanner class TestRevised public vo