我正在尝试解决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)
*/
答案 0 :(得分:1)
您应将s.nextInt()
括在if(s.hasNextInt()){}
中,以确保从扫描程序中读取有效的int。
答案 1 :(得分:0)
当您调用s.nextInt()
时,它只会读取直到整数结束,并将新行留在缓冲区中。
因此,当您随后调用nextLine()时,它会读入4
和aba
之间的新行。
要解决此问题,请在致电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.length
和j<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);
}