java.util.NoSuchElementException

时间:2017-09-03 04:19:46

标签: java exception error-handling

Scanner  sc=new Scanner(System.in);
    int k=sc.nextInt();
    sc.nextLine();
    while(k-->0)
    {
        boolean t =false;
        int n=sc.nextInt();
        int l=sc.nextInt();

        int i,j,m;
        int a[]= new int[n];
        for(i=0;i<n;i++)
        {
            a[i]=sc.nextInt();

        }
        for(i=0;i<n-2;i++)
        {
            for(j=i+1;j<n-1;j++)
            {
                for(k=j+1;k<n;k++)
                {
                    if((a[i]+a[j]+a[k])==l)
                    {
                         t=true;
                        break;
                    }
                }
            }
        }
     String f=  t?"true":"false";
           System.out.println(f);
    }
    sc.close();

线程“main”中的异常

java.util.NoSuchElementException
at java.util.Scanner.throwFor(Scanner.java:907)
at java.util.Scanner.next(Scanner.java:1530)
at java.util.Scanner.nextInt(Scanner.java:2160)
at java.util.Scanner.nextInt(Scanner.java:2119)
at Solution.main(Solution.java:17)

示例输入

3
5 60
1 20 40 100 80 

示例输出false

我尝试了什么?

if(sc.hasNextInt())
n=sc.nextInt();
if(sc.hasNextInt())
l=sc.nextInt();

对于假定的hasNextInt()修复,我得到了更多的重复输出(即false)。

3 个答案:

答案 0 :(得分:0)

3
5 60
1 20 40 100 80 
false

这是我在运行代码后得到的内容。我猜你的代码是正确的。但你没有给它输入。

当扫描仪无法找到您要求阅读的内容时,会抛出

java.util.NoSuchElementException

提供完全正确的输入。

答案 1 :(得分:0)

您的代码似乎已经关闭了扫描仪。不要关闭它&amp;在程序中重新实例化,而在主程序开始时将其初始化一次。在主程序结束时关闭它。

  

扫描仪在资源关闭时关闭,因为它实现了   可关闭的界面。

如下例所示 -

  public static void main(String[] args) throws IOException {
        Scanner scanner = new Scanner(System.in);
        System.out.println(System.in.available());
        scanner.close();
        scanner = new Scanner(System.in);
        // System.out.println(System.in.available());
        // If you uncomment above: It will give you java.io.IOException: Stream closed
        String str = scanner.nextLine();
  }

从帖子java.util.NoSuchElementException - Scanner reading user input

获得此答案

答案 2 :(得分:-1)

在开始时进行迭代,并检查这样的条件:

do {
//Here the code
} while (i.hasNextInt());

并且对于扫描仪错误,您应该检查扫描仪是否有这样的

Scanner sc =new Scanner(System.in);
if (sc.hasNext()) {
//here the code
}