首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >线程中的arrayException“主”java.util.NoSuchElementException

问线程中的arrayException“主”java.util.NoSuchElementException
EN

Stack Overflow用户
提问于 2016-03-09 09:26:04
回答 2查看 89关注 0票数 1

你在用手机玩游戏。给您一个长度为n的数组,索引从0到n−1。数组的每个元素都是0或1。您只能移动到包含0的索引。一开始你排在第0位。在每一步中,您都可以执行以下操作之一:

向前或向后走一步。向前跳一次精确长度的毫米。这意味着您可以从位置x移动到x+1、x−1或x+m。新职位必须包含0。你也可以移动到任何大于n-1的位置。

你不能从0位置向后移动。如果你移动到大于n−1的任何位置,你就会赢得比赛。

给定数组和跳转的长度,您需要确定是否有可能赢得比赛。

STDIN样本:

代码语言:javascript
复制
1
86 95
0 0 1 0 0 0 1 0 0 0 0 0 1 0 0 0 1 0 0 1 0 1 1 0 1 0 0 0 0 0 0 1 0 1 1 0 0 1 0 0 1 0 0 1 1 0 1 0 0 1 1 0 1 0 1 0 1 1 0 1 1 0 0 1 0 0 1 0 1 1 0 0 1 1 1 0 1 1 0 0 0

/here 1在no中。在测试用例中,n为86,m为95,然后遵循86个数组/元素。

发生的错误:

代码语言:javascript
复制
Exception in thread "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:45)

虽然有些测试用例运行良好,但我无法弄清楚为什么我会得到这个编译错误?

这是我的代码:

代码语言:javascript
复制
import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;

public class Solution {

    public static Boolean track(int[] arr,int pos,int n, int[] add, int[] marked_arr)
    {
        if(pos>=n)
            return true;
        for(int i=0;i<3;i++)
        {
            int new_pos=pos+add[i];
            if(new_pos>=0) //valid jumping position in array
            {
                if(new_pos<n) 
                {
                    if(arr[new_pos]!=0)
                        continue;
                    if(marked_arr[new_pos]==-2)
                        return false;
                    marked_arr[new_pos]=-2;
                }
                if(track(arr,new_pos,n,add,marked_arr))
                    return true;
                else
                    marked_arr[new_pos]=-1;
            }
        }
        return false;
    }

    public static void main(String[] args) {
        /* Enter your code here. Read input from STDIN. Print output to STDOUT. Your class should be named Solution. */
        Scanner scanner = new Scanner(System.in);
        int t = Integer.parseInt(scanner.nextLine());
        for (int i = 0; i < t; i++) {
            int n = scanner.nextInt();
            int m = scanner.nextInt();

            int[] arr = new int[n];
            for (int j = 0; j < n; j++) 
                arr[j] = scanner.nextInt();

            int[] marked_arr= new int[n];
            Arrays.fill(marked_arr, -1); //if some position is visited once , we will make that position -2

            int[] add={m,1,-1};
            Boolean ans=track(arr,0,n,add,marked_arr);
            if(ans)
                System.out.println("YES");
            else
                System.out.println("NO");

        }
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-09 09:39:35

然后跟着86个数组元素。

这一行只有81个元素:

代码语言:javascript
复制
0 0 1 0 0 0 1 ...

但你在试着读86。

票数 0
EN

Stack Overflow用户

发布于 2016-03-09 09:35:34

问题在于这一行:

代码语言:javascript
复制
 arr[j] = scanner.nextInt();

您正在尝试获取不存在的下一个元素。请在打电话给.nextInt前检查一下

代码语言:javascript
复制
if (scanner.hasNextInt()) {
    arr[j] = scanner.nextInt();
}

此外,您还可以使用中断修改循环,也可以使用while (scanner.hasNext()) {}循环。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35887563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档