Java 如何在数组中打印选定的名称?

Java 如何在数组中打印选定的名称?,java,for-loop,Java,For Loop,如何在数组中打印所选名称?我想打印我在数组中输入的名称并单独打印,但当我尝试运行代码时,它会显示: Exception in thread "main" java.util.InputMismatchException at java.base/java.util.Scanner.throwFor(Scanner.java:939) at java.base/java.util.Scanner.next(Scanner.java:1594) at ja

如何在数组中打印所选名称?我想打印我在数组中输入的名称并单独打印,但当我尝试运行代码时,它会显示:

Exception in thread "main" java.util.InputMismatchException
    at java.base/java.util.Scanner.throwFor(Scanner.java:939)
    at java.base/java.util.Scanner.next(Scanner.java:1594)
    at java.base/java.util.Scanner.nextInt(Scanner.java:2258)
    at java.base/java.util.Scanner.nextInt(Scanner.java:2212)
    at Main.main(Main.java:17)
这是我的密码:

Scanner in = new Scanner(System.in);

  int numOfLoop = in.nextInt(); //number of loops I want.
  String[] name = new String[numOfLoop]; //size of the array is depend on how many loop I want.

  //Getting the names using for loop.
  for(int i = 0; i < numOfLoop; i++) {

   name[i] = in.nextLine();

}

  int num = in.nextInt(); //The name I want to print depend on what number I enter here.

  //Reading the array one by one to print the name I want.
  for(int i = 0; i <numOfLoop; i++) {

   if(name[i] == name[num]) {

   System.out.println(name[i]);

  }

}

预期输出:cody

要解决的代码片段中有几个典型的缺陷:

InputMismatchException-因为在调用nextInt后,并非所有新行都被正确使用 名称[i]==名称[num]-无效的字符串比较,应为名称[i]。EqualName[num] 缺少check num 扫描仪输入=新的ScannerSystem.in; System.out.println输入名称数:; int numOfLoop=in.nextInt//我想要的循环数。 in.nextLine;//跳过剩余行 String[]name=新字符串[numfloop]//数组的大小取决于我想要多少个循环。 System.out.println输入名称,每行一个:; //使用for循环获取名称。 对于int i=0;i=0&&num=0&&num
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);

        int numOfLoop = Integer.parseInt(in.nextLine()); // number of loops I want.
        String[] name = new String[numOfLoop]; // size of the array is depend on how many loop I want.

        // Getting the names using for loop.
        for (int i = 0; i < numOfLoop; i++) {
            name[i] = in.nextLine();
        }

        int num = Integer.parseInt(in.nextLine()); // The name I want to print depend on what number I enter here.
        if (num >= 0 && num < numOfLoop) {
            System.out.println(name[num]);
        } else {
            System.out.println("Invalid index.");
        }
    }
}

我以前也遇到过这个问题,当您从nextLine更改时,扫描器实例似乎在转到nextLine之前没有读取\n字符

只需在For循环之前添加in.nextLine;即可解决问题


您的错误源于这样一个事实:数组中的第一个条目被设置为空字符串,而您输入的姓氏被读取到通常放置第二个数字的位置,因此nextInt抛出错误,因为它获取的是字符串而不是int。

它是name[i]。equalname[num]对于字符串相等。此外,您只需要执行以下操作:ifname.length>num System.out.printlnname[num];这将匹配引用而不是内容。但如果索引中只需要该项,则根本不需要进行相等性检查。@AbraI最初还认为第二个循环可能是多余的,尽管它有助于检测和打印名称数组中的任何重复项:是否不需要第二个for循环?@AlexRudenko@Johny -根据您的要求,您不需要第二个循环。如果您仔细阅读,您将更容易理解此答案。如果您运行它并查看其行为是否符合您的预期,这将对您有进一步的帮助。如果有任何进一步的疑问/问题,请随时发表评论。@Johny,这取决于您。该循环允许检测重复的na如[my answer]中所示,如果没有循环,您只需在指定索引处打印一项。
Input the number of names: 
5
Input the names, one per line: 
john
jeff
joan
john
jake
Input the index of the name to print: 
0
Looking for name: john
john at index=0
john at index=3
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);

        int numOfLoop = Integer.parseInt(in.nextLine()); // number of loops I want.
        String[] name = new String[numOfLoop]; // size of the array is depend on how many loop I want.

        // Getting the names using for loop.
        for (int i = 0; i < numOfLoop; i++) {
            name[i] = in.nextLine();
        }

        int num = Integer.parseInt(in.nextLine()); // The name I want to print depend on what number I enter here.
        if (num >= 0 && num < numOfLoop) {
            System.out.println(name[num]);
        } else {
            System.out.println("Invalid index.");
        }
    }
}
5
Johny
Arvind
Kumar
Avinash
Stackoverflow
3
Avinash
  Scanner in = new Scanner(System.in);
    int numOfLoop = in.nextInt(); //number of loops I want.
    String[] name = new String[numOfLoop]; //size of the array is depend on how many loop I want.

    for (int i=0; i<name.length; i++){
        String names = in.next();
        name[i] = names;
    }
    System.out.println("The names array: " + Arrays.toString(name));

    for(int index=0;index<name.length;index++) {
        System.out.print("Enter an index you want to print: ");
        index = in.nextInt();
        System.out.println("index " + index + " is:  " + name[index-1]);
    }