【问题标题】:Why am I not getting any output? And there is an InputMismatchException为什么我没有得到任何输出?并且有一个 InputMismatchException
【发布时间】:2018-06-07 09:41:52
【问题描述】:

我正在尝试解决关于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)
*/

【问题讨论】:

  • 您的输出代码 sn-p 中的 210 是什么?
  • 注意阅读javadoc

标签: java arrays exception-handling stdout inputmismatchexception


【解决方案1】:

您应该将您的s.nextInt() 附在if(s.hasNextInt()){} 中,以确保有一个有效的int 可以从Scanner 中读取。

【讨论】:

    【解决方案2】:

    当您调用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 &lt;= queries.length; j++){

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

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

    编辑 2:

    前面的编辑​​最后适用于两个 for 循环 - 您希望 for 循环的限制项分别为 i&lt;strings.lengthj&lt;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);
    }
    

    【讨论】:

    • 非常感谢!我通过了所有测试用例。我错了 for 循环。感谢您纠正这个隐藏的错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-07
    • 1970-01-01
    • 2011-10-19
    • 1970-01-01
    相关资源
    最近更新 更多