我必须获得一个字符串输入和一个整数输入,但是输入的顺序应该是整数首先出现,然后应该要求用户输入字符串
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
^
之后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
^
现在,该nextLine
呼叫将产生预期的结果。因此,要修复程序,您所需要做的就是向nextLine
after之后添加另一个调用nextInt
,并丢弃其结果:
k = in.nextInt();
in.nextLine(); // Discard '\n'
input = in.nextLine();
我必须得到一个字符串输入和一个整数输入,但输入的顺序应该是整数在先,然后要求用户输入字符串 上面的代码工作得很好,但是如果我首先输入一个整数,就像下面的代码 然后抛出java.lang.ArrayIndexOutOfBoundsException。 下面是我源文件的完整代码: 公共类StringSwap{ } 请指出我在这里做错了什么。
问题内容: 我的教授倾向于执行以下操作来从用户那里获得一个号码: 与简单地做相比有什么好处? 包含以下内容: 正如我所看到的,除了其他的轨迹外,还调用Integer.parseInt()本身。简单地做会带来显着的性能提升吗?另一方面是否有任何弊端? 扫描包含大量数据而不是用户输入的文件时怎么样? 问题答案: 有2个观察结果: 在新行字符后面使用叶子。因此,如果在之后调用,则会读取换行符,而不是实际
我完全是Java的初学者。我制作了一个类,想输入一个数字和一个字符串,但我认为s=in。nextLine() 忽略此行。如何逐行输入两个值。
问题内容: 尝试使用中的方法时遇到麻烦。 这是我尝试过的: 示例1:此示例按预期方式工作。该行;等待输入,然后再继续。 产生输出: 示例2:此示例无法正常工作。本示例使用while循环以及结构允许用户选择要执行的操作。一旦程序到达;,它就不会等待输入,而是执行该行;。 产生输出: 这使得不可能输入句子。 为什么示例不能按预期工作?唯一之间的区别。和是那个 具有循环和结构。我不明白为什么这会影响的行
输出:false 为什么?有人能解释一下吗?
莫奇托官方文件说: 警告: 如果使用参数匹配器,则所有参数都必须由匹配器提供。 例如:(示例显示验证,但同样适用于存根): 匹配器方法(如、)不返回匹配器。在内部,它们在堆栈上记录一个匹配器并返回一个伪值(通常为空)。 我很好奇为什么即使任何类似(的方法返回,也无法在值旁边使用。