我正在做UVa在线评判的问题10003“切割棒”,我很确定我的代码有效,我想我正确地退出了这个问题。但是我仍然遇到运行时错误,我读到某处是因为我没有像我应该那样退出应用程序。我希望你们能帮我解决这个问题。
import java.io.*;
class MAIN {
static int len, c, min;
static int mat[][] = new int[52][52];
static int arr[] = new int [52];
static BufferedReader BufferReader = new BufferedReader(new InputStreamReader(System.in));
public static void llenaarr()throws IOException{
for(int i=0; i<c-1; i++) {
arr[i+1] = Integer.parseInt(BufferReader.readLine());
}
arr[0] = 0;
arr[c] = len;
}
public static void llenamat(){
for(int i=0; i<=c; i++) {
for(int j=0;j<=c;j++) {
mat[i][j] = Integer.MAX_VALUE;
}
}
for(int i=0; i<c; i++) {
mat[i][i] = 0;
mat[i][i+1] = 0;
}
mat[c][c] = 0;
for(int i=0; i<c-1; i++) {
mat[i][i+2] = arr[i+2] - arr[i];
}
}
public static void minimo(){
for(int k=3; k<=c; k++) {
for(int i=0; i<=c-k; i++) {
for(int j=i+1; j<=i+k-1; j++) {
min=mat[i][j] + mat[j][i+k] + arr[i+k] - arr[i];
if((min< mat[i][i+k])) {
mat[i][i+k] = min;
}
}
}
}
}
public static void main (String args[]) throws IOException {
while((len = Integer.parseInt(BufferReader.readLine())) > 0){
c = (Integer.parseInt(BufferReader.readLine()))+1;
llenaarr();
llenamat();
minimo();
System.out.println("The minimum cutting is "+mat[0][c]+".");
}
}
}
答案 0 :(得分:2)
您的程序在处理输入期间会抛出某种运行时异常。要验证这一点,您应该在try-catch块中封装代码(对输入进行操作并生成输出的部分)。
尝试捕获的第一件事是通用异常。这将捕获任何类型的运行时异常。再次通过在线判断运行它,你现在应该看到一个错误的答案结果(假设某些事情处理不正确,因为它毕竟是抛出异常)。
现在是侦探工作。回到您的源代码并查看您所做的所有调用,并使用API文档检查他们可能抛出的所有可能的异常。例如,如果调用Integer.parseInt(inputString),则可能抛出NumberFormatException。因此,在您的catch(Exception e)块之上,开始添加一些您认为可能导致问题的更具体的异常。
理想情况下(如果您有时间和耐心),您希望一次添加这些,并在每个人之后重新提交给在线评委。当结果从错误答案移回运行时错误时,您将知道您已找到导致问题的异常。从这里开始,希望这将有助于您缩小在源代码解决方案中关注(修复)的内容。
祝你好运。