UVA Online Judge中的运行时错误

时间:2011-06-21 16:12:47

标签: java algorithm runtime-error

我正在做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]+".");
                    }
            }
    }

1 个答案:

答案 0 :(得分:2)

您的程序在处理输入期间会抛出某种运行时异常。要验证这一点,您应该在try-catch块中封装代码(对输入进行操作并生成输出的部分)。

尝试捕获的第一件事是通用异常。这将捕获任何类型的运行时异常。再次通过在线判断运行它,你现在应该看到一个错误的答案结果(假设某些事情处理不正确,因为它毕竟是抛出异常)。

现在是侦探工作。回到您的源代码并查看您所做的所有调用,并使用API​​文档检查他们可能抛出的所有可能的异常。例如,如果调用Integer.parseInt(inputString),则可能抛出NumberFormatException。因此,在您的catch(Exception e)块之上,开始添加一些您认为可能导致问题的更具体的异常。

理想情况下(如果您有时间和耐心),您希望一次添加这些,并在每个人之后重新提交给在线评委。当结果从错误答案移回运行时错误时,您将知道您已找到导致问题的异常。从这里开始,希望这将有助于您缩小在源代码解决方案中关注(修复)的内容。

祝你好运。