将多个名称保存在字符串数组中

时间:2019-07-11 08:19:52

标签: java arrays string

问题是写一个名为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个名称。

4 个答案:

答案 0 :(得分:4)

  

按回车键(换行符为\ n字符)时出现问题。 nextInt()仅使用整数,但跳过换行符\ n。要解决此问题,您可能需要在读取int之后添加一个额外的input.nextLine(),这可能会消耗\ n。

in.nextInt();之后,只需添加in.nextLine();即可消耗输入中多余的\ n。这应该起作用。

原始答案: https://stackoverflow.com/a/14452649/7621786

答案 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;
}