问题是写一个名为Seyyed的类包含一个名为seyyed的方法。我应该将某些人的名字保存在main方法的String数组中,然后计算以“ Seyyed”开头的名字。我写了下面的代码。但是输出是意外的。问题出在第10行,句子“输入名称:”第一次被打印两次。
import java.util.Scanner;
public class Seyyed {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.print("Enter the number of names :");
int n = in.nextInt();
String[] names = new String[n];
for (int i = 0; i < names.length; i++) {
System.out.println("Enter a name : ");
names[i] = in.nextLine();
}
int s = seyyed(names);
System.out.println("There are " + s + " Seyyed");
in.close();
}
static int seyyed(String[] x) {
int i = 0;
for (String s : x)
if (s.startsWith("Seyyed"))
i++;
return i;
}
}
例如,当我输入3以添加3个名称时,程序将重复2次“输入名称:”语句,输出结果如下:
Enter the number of names :3
Enter a name :
Enter a name :
Seyyed Saber
Enter a name :
Ahmad Ali
There are 1 Seyyed
我可以输入2个名称,而我希望输入3个名称。
答案 0 :(得分:4)
按回车键(换行符为\ n字符)时出现问题。 nextInt()仅使用整数,但跳过换行符\ n。要解决此问题,您可能需要在读取int之后添加一个额外的input.nextLine(),这可能会消耗\ n。
在in.nextInt();
之后,只需添加in.nextLine();
即可消耗输入中多余的\ n。这应该起作用。
答案 1 :(得分:2)
输入数字时,还请按Enter键,该键将执行“ \ n”输入值,该值由您的第一个nextLine()方法捕获。 为防止这种情况,您应在代码中插入nextLine(),以在读取int值后使用“ \ n”字符。
Scanner in = new Scanner(System.in);
System.out.print("Enter the number of names :");
int n = in.nextInt();
in.nextLine();
String[] names = new String[n];
对于同一问题的好答案:https://stackoverflow.com/a/7056782/4983264
答案 2 :(得分:0)
nextInt()将使用该整数的所有字符,但不会触及行尾字符。因此,当您在循环中第一次说nextLine()时,它将读取上一个scanInt()剩余的eol,因此基本上是读取一个空字符串。要解决此问题,请在循环之前使用nextLine()清除扫描程序,或者对Strings和int使用其他扫描程序。
答案 3 :(得分:0)
尝试这个:
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.print("Enter the number of names :");
int n = in.nextInt();
in.nextLine();
String[] names = new String[n];
for (int i = 0; i < names.length; i++) {
System.out.println("Enter a name : ");
names[i] = in.nextLine();
}
int s = seyyed(names);
System.out.println("There are " + s + " Seyyed");
in.close();
}
static int seyyed(String[] x) {
int i = 0;
for (String s : x)
if (s.startsWith("Seyyed"))
i++;
return i;
}