Почему я не получаю вывод?И есть исключение InputMismatchException - PullRequest
0 голосов
/ 07 июня 2018

Я пытаюсь решить проблему с хакерранком.Но мой вывод не отображается, и программа выдает 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 голосов
/ 07 июня 2018

Когда вы вызываете 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(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);
}
0 голосов
/ 07 июня 2018

Вы должны заключить свой s.nextInt() в if(s.hasNextInt()){}, чтобы быть уверенным в том, что фактически есть int для чтения со сканера.

...