你在用手机玩游戏。给您一个长度为n的数组,索引从0到n−1。数组的每个元素都是0或1。您只能移动到包含0的索引。一开始你排在第0位。在每一步中,您都可以执行以下操作之一:
向前或向后走一步。向前跳一次精确长度的毫米。这意味着您可以从位置x移动到x+1、x−1或x+m。新职位必须包含0。你也可以移动到任何大于n-1的位置。
你不能从0位置向后移动。如果你移动到大于n−1的任何位置,你就会赢得比赛。
给定数组和跳转的长度,您需要确定是否有可能赢得比赛。
STDIN样本:
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个数组/元素。
发生的错误:
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)虽然有些测试用例运行良好,但我无法弄清楚为什么我会得到这个编译错误?
这是我的代码:
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");
}
}
}发布于 2016-03-09 09:39:35
然后跟着86个数组元素。
这一行只有81个元素:
0 0 1 0 0 0 1 ...但你在试着读86。
发布于 2016-03-09 09:35:34
问题在于这一行:
arr[j] = scanner.nextInt();您正在尝试获取不存在的下一个元素。请在打电话给.nextInt前检查一下
if (scanner.hasNextInt()) {
arr[j] = scanner.nextInt();
}此外,您还可以使用中断修改循环,也可以使用while (scanner.hasNext()) {}循环。
https://stackoverflow.com/questions/35887563
复制相似问题