【发布时间】:2017-01-28 20:07:12
【问题描述】:
- 请检查错误
- 我已显示发生的运行时错误
- 请说明其中出了什么问题。
这就是问题 [Hacker Rank Challenges - Washing Plates ]:https://www.hackerrank.com/contests/101hack41/challenges/washing-plates
-
错误:
Exception in thread "main" java.util.NoSuchElementException at java.util.Scanner.throwFor(Scanner.java:862) 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 Plates.main(Plates.java:17) -
代码。
import java.util.*; public class Plates { public static void main(String[] args) { Scanner in = new Scanner(System.in); //System.out.println("Enter Details"); String s = in.next(); int l = s.length(); int n = s.charAt(0); int k = s.charAt(l - 1); int arr[][] = new int[n][2]; for(int i = 0; i < n; i++) { for(int j = 0; j < 2; j++) { arr[i][j] = in.nextInt(); } } int max = 0; int inc[] = new int[n]; int ded[] = new int[n]; for(int t = 0; t < n; t++) { for(int p = 0; p < 2; p++) { if(p == 0) { inc[t] = arr[t][p]; } else if(p == 1) { ded[t] = arr[t][p]; } } } int a, b; int sum = 0, loss = 0; for(a = 0; a < n; a++) { for(b = 1; b <= k; b++) { sum = sum + inc[a + 1]; loss = loss - ded[a + 1]; } if((sum - loss) > max) { max = sum - loss; } } System.out.println(max); } }
【问题讨论】:
-
正在编译。它在运行时失败。
-
不确定发生了什么,但我认为您的堆栈跟踪明确说明了您在这一行中的错误
arr[i][j] = in.nextInt(); -
最好在源代码中指出,即异常中提到的行。
-
下一步是查看库方法的 Javadocs,它会抛出异常(在本例中为
java.util.Scanner.nextInt),以了解它抛出异常的原因。然后,如果您不理解它(尽管在这种情况下,文档中似乎已经足够清楚......),您可能会问那个,它是什么意味着当@ 987654326@ 抛出NoSuchElementException。 -
您应该在尝试执行
in.nextInt()之前检查集合中是否还有其他元素(通常您会使用while(in.hasNextInt())作为迭代器而不是for loop)。java.util.NoSuchElementException在运行时抛出,这就是你的代码编译的原因。
标签: java