为什么我没有得到任何输出?并且有一个 InputMismatchException

Why am I not getting any output? And there is an InputMismatchException

我正在尝试解决 hackerrank 上的练习题。但是,我的输出没有显示,程序抛出一个 InputMismatchException 有人可以帮我吗?

输入格式

输出格式

Return所有查询结果的整数数组。

示例输入:

4
aba
baba
aba
xzxb
3
aba
xzxb
ab

示例输出:

2
1
0
-------------------------------------------------------------------------  
/*my program*/

import java.io.*;
import java.math.*;
import java.security.*;
import java.text.*;
import java.util.*;
import java.util.concurrent.*;
import java.util.regex.*;
import java.util.ArrayList;
import java.util.Arrays;

class Solution {
    public static void main(String[] args) {
    Scanner s = new Scanner(System.in);
    int n = s.nextInt();
    String strings[] = new String[n];
     int count = 0;
    int i,j=0;
    for(int a=0 ; a<n ; a++){
        strings[a] = s.nextLine();
    }

    int q = s.nextInt();
    String queries[] = new String[q];
    for(int b=0; b<q;b++){
        queries[b] = s.nextLine();
    }
    for(i=0; i <= strings.length; i++){

    for(j=0; j <= queries.length; j++){
          if(queries[j].compareTo(strings[i]) == 0){
                count++;
          }          
    }           
    System.out.println(count);
    count = 0;
    }
      }
}

/* 
Output : ~ no response on stdout ~
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:864)
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.nextInt(Scanner.java:2117)
at java.util.Scanner.nextInt(Scanner.java:2076)
at Solution.main(Solution.java:22)
*/

您应该将 s.nextInt() 包含在 if(s.hasNextInt()){} 中,以确保有效地从扫描程序中读取一个 int。

当您调用 s.nextInt() 时,它只读取整数的末尾,将新行留在缓冲区中。

因此,当您随后调用 nextLine() 时,它会读取 4aba 之间的新行。

要解决此问题,请在调用 nextInt() 后调用 nextLine() 将缓冲区移动到新行之后。

Scanner s = new Scanner(System.in);
int n = s.nextInt();
String strings[] = new String[n];
 int count = 0;
int i,j=0;
s.nextLine();
for(int a=0 ; a<n ; a++){
    strings[a] = s.nextLine();
}

int q = s.nextInt();
String queries[] = new String[q];
s.nextLine();
for(int b=0; b<q;b++){
    queries[b] = s.nextLine();
}

编辑:

此外,在最后的 for 循环中,您输入了:

for(j=0; j <= queries.length; j++){

但这将导致 IndexOutOfBoundsException。你实际上想要:

for(j=0; j < queries.length; j++){

编辑 2:

之前的编辑适用于末尾的两个 for 循环 - 您希望 for 循环的限制项分别为 i<strings.lengthj<queries.length

另外,为了达到预期的输出,for 循环的顺序应该颠倒:

for(j=0; j < queries.length; j++){
    int count = 0;
    for(i=0; i < strings.length; i++) {
        if (queries[j].compareTo(strings[i] == 0)) {
            count++;
        }
    }
    System.out.orintln(count);
}