不能一起使用 Scanner.nextInt() 和 Scanner.nextLine() [重复]

2024-01-17

我必须获得字符串输入和整数输入,但输入顺序应该是整数先出现,然后应要求用户输入字符串

Scanner in = new Scanner(System.in);


    input = in.nextLine();
    k = in.nextInt();

    in.close();

上面的代码工作正常,但是如果我像下面的代码一样首先输入一个整数

Scanner in = new Scanner(System.in);

    k = in.nextInt();
    input = in.nextLine();


    in.close();

然后它抛出 java.lang.ArrayIndexOutOfBoundsException。

这是我的源文件的完整代码:

import java.util.Scanner;

公共类 StringSwap {

public static void main(String args[]) {
    String input;
    int k;

    Scanner in = new Scanner(System.in);

    k = in.nextInt();
    input = in.nextLine();


    in.close();

    int noOfCh = noOfSwapCharacters(input);
    originalString(input, noOfCh, k);

}

public static int noOfSwapCharacters(String s) {

    char cS[] = s.toCharArray();
    int i = 0, postCounter = 0;
    while (cS[i] != '\0') {
        if (cS[i] != '\0' && cS[i + 1] != '\0') {

            cS[cS.length - 1 - postCounter] = '\0';

            postCounter++;

        }
        i++;
    }

    return postCounter;

}

public static void originalString(String s, int noOfCh, int k) {    
    int counter = 1, chCounter = 0;
    char cArray[] = s.toCharArray();
    String post = "";
    String pre = "";
    String finalString = "";
    char temp;

    for (int i = 1; i <= k; i++) {
        chCounter = 0;
        counter = 1;
        post = "";
        pre = "";

        for (int j = 0; j < cArray.length; j++) {

            if (counter % 2 == 0 && chCounter <= noOfCh) {
                temp = cArray[j];
                post = temp + post;
                cArray[j] = '\0';
                chCounter++;

            }
            counter++;

        }
        for (int h = 0; h < cArray.length; h++) {

            if (cArray[h] != '\0')
                pre = pre + cArray[h];

        }

        finalString = pre + post;
        for (int l = 0; l < finalString.length(); l++) {
            cArray[l] = finalString.charAt(l);

        }

    }

    System.out.println(finalString);
}

}

请指出我在这里做错了什么。


问题是'\n'整数后面的字符。你打电话时nextInt,扫描仪读取int,但它不消耗'\n'其后的字符;nextLine这样做。这就是为什么你得到一个空行而不是你期望得到的字符串。

假设您的输入具有以下数据:

12345
hello

这是输入缓冲区最初的样子(^代表的位置Scanner读取下一条数据):

1  2  3  4  5 \n h  e  l  l  o \n
^

After nextInt,缓冲区看起来像这样:

1  2  3  4  5 \n h  e  l  l  o \n
              ^

首先nextLine消耗\n,让你的缓冲区像这样:

1  2  3  4  5 \n h  e  l  l  o \n
                 ^

Now the nextLine调用将产生预期的结果。因此,要修复您的程序,您所需要做的就是添加另一个调用nextLine after nextInt,并丢弃其结果:

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

不能一起使用 Scanner.nextInt() 和 Scanner.nextLine() [重复] 的相关文章

随机推荐

  • 内联块元素和垂直对齐推理

    我使用 display inline block 有 2 个彼此相邻的 div 框 如果没有内容 两个内联块 div 都会与顶部垂直对齐 如果两者都有内容 它们也会垂直对齐到顶部 如果其中只有一个具有文本内容 则具有文本内容的 div 框将
  • SQLite - 存储多个值

    如何在 SQLite 数据库中存储和检索同一列的同一行的多个值 即我有一个产品列 另一列是商店 我在其中放入所有可以获得该产品的商店 Product iLamp Stores River s McWay Lonnie s 我怎样才能实现这个
  • Xcode 4.1 代码签名问题

    我已经阅读了很多线程 但在这里找不到类似我的问题的内容 我认为这是一个简单的修复 但我似乎找不到答案 我正在使用 Xcode 4 1 Gold Master 基本上 当我归档我的 Mac 应用程序时 它会经历所有正常流程 构建成功 但是 当
  • 有没有办法像 C# 中的 @"string" 一样转义 powershell 中的字符串

    有没有办法在 powershell 中转义完整的字符串 就像 string 在 C 中的工作方式一样 我正在编写一个脚本 其中有几个如下所示的字符串 D A CCLCSWRPWPDTLOCRRC SY A CCDCLCSWRPWPDTLOC
  • Laravel / Eloquent hasMany 关系 sum()

    我不知道如何立即加载关系列的总和 数据库 简化 如下 TABLES PRODUCT PRODUCT VARIATIONS ID ID NAME NAME AVAILABLE STOCK 我的关系设置如下 public function va
  • 如何在扩展到匹配文件之前访问文字通配符参数?

    背景 我正在编写一个必须接收这些参数的 bash 脚本 文件名 包含一组规则的文件 文件名列表 要处理的文件 可以使用通配符 目标文件夹 将存储文件的处理版本 理论上有 3 个参数 但实际上第二个参数会扩展 因此如果通配符匹配多个文件 参数
  • 关于round_up宏的问题

    define ROUND UP N S N S 1 S S 通过上面的宏 有人可以帮助我理解 s 1 部分 为什么呢 还有宏 例如 define PAGE ROUND DOWN x ULONG PTR x PAGE SIZE 1 defin
  • setter 和 getter 的模板

    我不熟悉模板 但我想知道是否可以将它们用于 setter 和 getter 方法 例如在这种情况下 double exmlClass getA void const return a void exmlClass setA const do
  • 无法使 NSTimer 无效(停止)[重复]

    这个问题在这里已经有答案了 可能的重复 NSTimer 不会停止 https stackoverflow com questions 1031554 nstimer doesnt stop 我正在使用 NSTimer 在播放音频时更新滑块的
  • 使用 REST API 将角色添加到 Google Cloud Platform 上的服务帐号

    我想使用调用 REST API 的 python 脚本在 GCP 上创建一个服务帐户 然后赋予它特定的角色 最好是一些角色these https cloud google com iam docs viewing grantable rol
  • 如何在 C# 中更改选项卡控件的字体属性而不更改其子控件的字体?

    我想更改选项卡控件的字体 因为我希望选项卡页标题中的文本看起来更大 但是 当我更改设计器中选项卡控件的字体属性 我使用的是 MS VStudio 2010 时 其子控件的字体也会更改 例如标签和树视图 这是我不打算做的 我只想更改选项卡页标
  • 验证失败时 TextBox 周围的红色边框

    我正在使用 ASP NET MVC 2 当验证失败时 Html DropDownListFor 和 Html TextAreaFor 自动获取红色边框 如何在验证失败时使 TextBox 使用 Html TextBoxFor 的四个边框变为
  • React-native,monorepo:无法解析模块@babel/runtime/helpers/interopRequireDefault

    我已经在 monorepo 中设置了一个反应本机应用程序作为工作区 我这样做是因为我想分享我在移动应用程序和网络应用程序之间创建的一些反应组件 我的仓库的基本结构是 root package json with nohoist expoap
  • 带有“未定义”参数的 JavaScript 函数[重复]

    这个问题在这里已经有答案了 浏览 Modernizr 源代码我发现了奇怪的事情 window Modernizr function window document undefined 之后 将使用两个参数调用该函数 this this do
  • Spring - server.connection-timeout 不起作用

    In my application properties文件我有 server port 8086 server connection timeout 15000 我知道该文件正在正确加载 因为服务器正在端口 8086 上运行 在应用程序中
  • 在 iOS 上查看大型 PDF 的最佳方式是什么?

    我目前正在使用 QLPreviewController 来查看 PDF 250MB 但是它无法处理真正的大文件 要么我得到的信息是整个文件尚未加载 要么整个应用程序死掉了 我还需要自定义使用 QLPreviewController 不可能实
  • 如何重建 Jenkins 管道

    我们一直在使用 Rebuilder 插件 https wiki jenkins io display JENKINS Rebuild Plugin https wiki jenkins io display JENKINS Rebuild
  • 在 powershell 中同时按下 Windows 徽标键 + Alt + PrtScn 的多个按键?

    我通过引用链接尝试了下面的代码 但无法一次按下这些键 我需要改变吗 code namespace SendTheKeys class SendIt public static void Main string args System Run
  • 如何在 QML 中将项目拖动到圆圈内?

    下面的代码允许在由最小和最大拖动值定义的矩形区域中拖动红色小矩形 我希望它只持续到半径为 100 的父矩形的边界 这意味着它现在是一个圆 如何在 QML 中将项目拖动到圆圈内 Window width 200 height 200 visi
  • 不能一起使用 Scanner.nextInt() 和 Scanner.nextLine() [重复]

    这个问题在这里已经有答案了 我必须获得字符串输入和整数输入 但输入顺序应该是整数先出现 然后应要求用户输入字符串 Scanner in new Scanner System in input in nextLine k in nextInt