【发布时间】:2017-05-23 11:49:02
【问题描述】:
我正在尝试解决 Uva-562 - 分硬币问题。我的解决方案是给出运行时错误。错误消息:
以下是错误消息:java.util.Scanner.throwFor(Scanner.java:862) 处 java.util.Scanner.next(Scanner.java:1485) 处的线程“主”java.util.NoSuchElementException 中的异常在 java.util.Scanner.nextInt(Scanner.java:2117) 在 java.util.Scanner.nextInt(Scanner.java:2076) 在 Main.main(Main.java:73)
这是我的代码:
package com.example.recursion;
import java.util.Scanner;
public class main {
public static Scanner scanner;
public static int[] binary;
public static int[] set;
public static int m;
public static int total;
public static int dp[][];
public static void initDp(){
dp=new int[101][50001];
for(int i=0;i<101;i++)
for(int j=0;j<50001;j++)
dp[i][j]=-1;
}
public static void readcase() {
m = scanner.nextInt();
int i;
total = 0;
set=new int[101];
for (i = 0; i < m; i++) {
set[i] = scanner.nextInt();
total += set[i];
}
int solution=solve(0,0);
print(solution);
}
public static void print(int solution){
System.out.println(solution);
}
public static int solve(int i, int sum1){
int left=0,right=0;
if(dp[i][sum1] > -1){
return dp[i][sum1];
}
if(i==m){
int sum2;
sum2=total-sum1;
return Math.abs(sum1-sum2);
}
left=solve(i+1,sum1);
right=solve(i+1, sum1+set[i]);
if(left<right)
return dp[i][sum1]=left;
else
return dp[i][sum1]=right;
}
public static void main(String args[]) {
scanner = new Scanner(System.in);
int n, i;
n = scanner.nextInt();
for (i = 0; i < n; i++) {
initDp();
readcase();
}
}
}
【问题讨论】:
-
错误信息是?
-
这里是错误消息:java.util.Scanner.throwFor(Scanner.java:862) at java.util.Scanner.next(Scanner) 的线程“main”java.util.NoSuchElementException 中的异常.java:1485) 在 java.util.Scanner.nextInt(Scanner.java:2117) 在 java.util.Scanner.nextInt(Scanner.java:2076) 在 Main.main(Main.java:73)
标签: java recursion dynamic-programming