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

时间:2018-06-07 09:41:52

标签: java arrays exception-handling stdout inputmismatchexception

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

输入格式

  • 第一行包含整数n,变量strings的大小。
  • 下一个n行中的每一行都包含一个字符串strings[a]
  • 下一行包含q,大小为queries
  • 下一个q行中的每一行都包含一个字符串queries[b]

输出格式

按顺序返回所有查询结果的整数数组。

示例输入:

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)
*/

2 个答案:

答案 0 :(得分:1)

您应将s.nextInt()括在if(s.hasNextInt()){}中,以确保从扫描程序中读取有效的int。

答案 1 :(得分:0)

当您调用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);
}