-1

次のコードを書きました。私の PC では問題なく動作しますが、Codechef で NZEC タイプのランタイム エラーが発生します。

import java.io.*;

class Main {
public static void main(String args[]) throws IOException {
    BufferedReader o = new BufferedReader(new InputStreamReader(System.in));
    int n = Integer.parseInt(o.readLine());       //Total videos
    int s[] = new int[n];
    int e[] = new int[n];
    int c=0, i=0;
    for(i=0;i<n;i++)            //Start and end times
    {
        s[i] = Integer.parseInt(o.readLine());           
        e[i] = Integer.parseInt(o.readLine());
    }
    int q = Integer.parseInt(o.readLine()); //No. of groups
    String st = new String();
    int noa = 0 , j = 0 , k = 0, z = 0;
    int count[] = new int[q];    //No. of videos of each group
    for(i=0;i<q;i++)
    {
        int marked[] = new int[n];
        st = o.readLine();
        String temp[] = st.split(" ");
        noa = Integer.parseInt(temp[0]);
        double toa[] = new double[noa];
        for(j=0;j<noa;j++)                   //Do for every alien of ith group
        {
            toa[j] = Double.parseDouble(temp[j+1]);    
            for(k=0;k<n;k++)                //Check for every video
            {
                if(toa[j]>=s[k]&&toa[j]<=e[k]&&marked[k]!=-1)
                {
                    z++;
                    marked[k] = -1;
                }
            }
        }

        count[i] = z;
        z = 0;
    }
    for(i=0;i<q;i++)
        System.out.println(count[i]);
}
}

誰かがこれで私を助けてくれますか? エラーがメソッドの使用によるものである場合split()、PC でエラーが発生しないのはなぜですか?

4

1 に答える 1

1

コードは非常に安全ではなく、入力が期待どおりにならない場合はすぐにクラッシュする可能性があります。いくつかの例を次に示します。

  • Integer.parseInt()例外処理なしで呼び出し続ける= 呼び出しが成功することを確認せずに
  • 許容できるかどうかを確認せずに、解析された整数を使用して配列を作成します(少なくとも正の値で、おそらく大きすぎないようにする必要があります)
  • temp[j+1]temp の長さが少なくとも であることを確認せずにアクセスしようとしましj+2た。

また、一般的なコメントとして、意味のある変数を使用してコードを読みやすくするようにしてください。 n、s、e、c、i、noa、st、toa が何であるかを推測できる人はいないと思います...

于 2012-07-15T20:38:34.430 に答える