不能一起使用Scanner.nextInt()和Scanner.nextLine()
我必须得到一个stringinput和一个整数input,但是input的顺序应该是那个整数先出现然后用户应该被要求stringinput
Scanner in = new Scanner(System.in); input = in.nextLine(); k = in.nextInt(); in.close();
上面的代码工作正常,但如果我采取一个整数input第一个像下面的代码
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
做到这一点。 这就是为什么你得到一个空行,而不是你期望得到的string。
假设您的input具有以下数据:
12345 hello
下面是input缓冲区最初看起来如何( ^
表示Scanner
读取下一条数据的位置):
1 2 3 4 5 \nhello \n ^
nextInt
之后,缓冲区看起来像这样:
1 2 3 4 5 \nhello \n ^
第一个nextLine
消耗\n
,让你的缓冲区如下所示:
1 2 3 4 5 \nhello \n ^
现在nextLine
调用将产生预期的结果。 因此,要修复程序, nextLine
在nextInt
之后再次调用nextLine
,并放弃其结果:
k = in.nextInt(); in.nextLine(); // Discard '\n' input = in.nextLine();