当我执行以下操作时:
static void Append() {
StringBuilder sb = new StringBuilder();
System.out.print("How many words do you want to append? ");
int n = input.nextInt();
System.out.println("Please type the words you want to append: ");
for (int c = 1; c <= n; c++) {
String str = input.nextLine();
sb.append(str);
System.out.print(" ");
}
System.out.print(sb);
}
如果我输入3,那么计算机只允许我输入2个单词。
这是输出:
How many words do you want to append? 3
Please type the words you want to append:
I
am
Iam
此外,为什么在单词之前有一个空格?打印功能在输入功能之后。那不应该相反吗?
答案 0 :(得分:1)
您应将nextLine()替换为next()。
Give book title : Harry Potter
Give book price : 12.5
Give number of volumes : 5
Title: Harry Potter costs 12.5 for 5 volumes.
Give book title : James Anderson
Give book price : 45.6
Give number of volumes : 7
Title: James Anderson costs 45.6 for 7 volumes.
Give book title : Lucas Empire
Give book price : 34.5
Give number of volumes : 7
Title: Lucas Empire costs 34.5 for 7 volumes.
答案 1 :(得分:0)
如果调试该程序,则会发现第一次循环将获得a = [[ 'abc=lalalla', 'appa=kdkdkdkd', 'kkakaka=oeoeoeo'],[ 'abc=lalalla', 'appa=kdkdkdkd', 'kkakaka=oeoeoeo'],[ 'abc=lalalla', 'appa=kdkdkdkd', 'kkakaka=oeoeoeo']]
d = [dict(x.split('=') for x in s) for s in a]
,且字符串为空。这是发生问题的时候。
当您为input.nextLine()
输入一个3
和一个\n
时,输入缓冲区包含“ 3 \ n”,而int n = input.nextInt();
只会取那个“ 3”,如下图所示:
输入的input.nextInt();
为1时,缓冲区中的“ \ n”保持不变。然后,当position
所需的程序时,它将读取缓冲区,直到“ \ n”为止,从而导致读取空字符串。
因此可能的解决方法是在循环之前添加nextLine()
,或使用String empty = input.nextLine();
代替input.next();
,因为在文档中,input.nextLine();
将返回下一个令牌。
更新:请注意,没有人在底部回答您的第二个问题...
您应将循环中的行input.next();
修改为System.out.println(" ");
。
答案 2 :(得分:0)
我认为这是因为它读取了将char更改为字符串的行 因此,它将更改行视为第一个和第一个字符串。 您只能输入两个字符串
答案 3 :(得分:0)
如果放置从输入中读取的代码打印行,如下所示:
static void append() {
Scanner input = new Scanner(System.in);
StringBuilder sb = new StringBuilder();
System.out.print("How many words do you want to append? ");
int n = input.nextInt();
System.out.println("Please type the words you want to append: ");
for (int c = 1; c <= n; c++) {
String str = input.nextLine();
System.out.println("input str=" + str); //pay attention to this line
sb.append(str);
System.out.print(" ");
}
System.out.print(sb);
}
您将看到第一次迭代不从输入中读取。因为缓冲区中已经存在\n
,该缓冲区已被nextInt读取。
要解决此问题,可以像在下面的代码中那样在nextInt之后跳过行(我不确定这是最佳解决方案):
static void append() {
Scanner input = new Scanner(System.in);
StringBuilder sb = new StringBuilder();
System.out.print("How many words do you want to append? ");
int n = input.nextInt();
System.out.println("Please type the words you want to append: ");
if (input.hasNextLine()) input.nextLine();
for (int c = 1; c <= n; c++) {
String str = input.nextLine();
System.out.println("input str=" + str);
sb.append(str);
System.out.print(" ");
}
System.out.print(sb);
}
如果要将句子作为单个字符串读取,则使用next()不是解决方案。