我必须得到一个字符串输入和一个整数输入,但输入的顺序应该是整数在先,然后要求用户输入字符串
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
以下是输入缓冲区最初的外观(^
表示扫描器
读取下一段数据的位置):
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
调用将产生预期的结果。因此,要修复您的程序,您所需要的只是在nextint
之后向nextline
添加另一个调用,并丢弃其结果:
k = in.nextInt();
in.nextLine(); // Discard '\n'
input = in.nextLine();
问题内容: 我必须获得一个字符串输入和一个整数输入,但是输入的顺序应该是整数首先出现,然后应该要求用户输入字符串 上面的代码工作正常,但是如果我先接受整数输入,如下面的代码 然后抛出java.lang.ArrayIndexOutOfBoundsException。 这是我的源文件的完整代码: 公共类StringSwap { } 请指出我在这里做错了什么。 问题答案: 问题是整数后面的字符。当您调用
问题内容: 我的教授倾向于执行以下操作来从用户那里获得一个号码: 与简单地做相比有什么好处? 包含以下内容: 正如我所看到的,除了其他的轨迹外,还调用Integer.parseInt()本身。简单地做会带来显着的性能提升吗?另一方面是否有任何弊端? 扫描包含大量数据而不是用户输入的文件时怎么样? 问题答案: 有2个观察结果: 在新行字符后面使用叶子。因此,如果在之后调用,则会读取换行符,而不是实际
我完全是Java的初学者。我制作了一个类,想输入一个数字和一个字符串,但我认为s=in。nextLine() 忽略此行。如何逐行输入两个值。
问题内容: 尝试使用中的方法时遇到麻烦。 这是我尝试过的: 示例1:此示例按预期方式工作。该行;等待输入,然后再继续。 产生输出: 示例2:此示例无法正常工作。本示例使用while循环以及结构允许用户选择要执行的操作。一旦程序到达;,它就不会等待输入,而是执行该行;。 产生输出: 这使得不可能输入句子。 为什么示例不能按预期工作?唯一之间的区别。和是那个 具有循环和结构。我不明白为什么这会影响的行
我有一个程序,从命令行接收来自用户的输入。令人恼火的是,第一次使用扫描器时,输入的文本会出现在下一行(之后)。但是,其他所有时候它都与在同一行。 代码:
问题内容: 当我直接使用(没有诸如Scanner之类的界面)接收数据时,它不会阻塞。但是,当我尝试使用Scanner时(类似于我们从接收字符串的方式),它确实可以。我想知道这样做的原因,以及所连接的Socket提供给您的InputStream与in的不同之处。 用于测试的客户端(用于两个服务器) 挂起的代码: 不阻塞的代码: 问题答案: (我认为您已经知道了这一点,但是…) 该方法返回当前行的其余