0

私は昨日Javaを学び始め、同じ数のペアを出力するfollowindプログラムを作成しましたが、実行すると次のようになります。

Exception in thread "main" java.lang.NullPointerException
at _aaaa.main(_aaaa.java:26)

これが私のプログラムです:

import java.util.*;

class pair {
    int first, second;
    pair() {
        first = second = 0;
    }
    public void make_pair(int a, int b)
    {
        first = a;
        second = b;
    }
}
public class aaaa {
    public static void main(String[] idontneedthis)
    {
        Scanner input = new Scanner(System.in);
        int N = input.nextInt(), i, lg = 0;
        int[] A = new int[5010];
        pair[] B = new pair[5010];
        for (N <<= 1, i = 1; i <= N; ++i)
        {
            int var = input.nextInt();
            if (A[var] > 0)
            {
                B[++lg].make_pair(A[var], var);
                A[var] = 0;
            }
            else
            {
                A[var] = i;
            }
        }
        if (lg == 0) System.out.print("-1");
        for (i = 1; i <= lg; ++i)
        {
            System.out.print(B[i].first + " " + B[i].second + "\n");
        }
    }
}

何が問題なのか、なぜこのエラーが発生するのかを教えてください。26()行をカットするB[++lg].make_pair(A[var], var);と、-1と表示されることに注意してください。

ありがとうございました!

4

3 に答える 3

4

配列内のペアを初期化する必要があります。

if (A[var] > 0) {
    B[++lg] = new pair(); //here
    B[lg].make_pair(A[var], var);
    A[var] = 0;
}

この行:

pair[] B = new pair[5010];

5010ペアの配列を作成しますが、それらを初期化するまで、それらはすべてnullです。

また、5010Nは関連していないため、NによってはArrayIndexOutOfBoundExceptionが発生する可能性があることにも注意してください。

于 2013-01-07T16:48:02.237 に答える
3

これが私がそれを書く方法です。言わないほど良い;)

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

class Pair {
    final int first, second;

    Pair(int first, int second) {
        this.first = first;
        this.second = second;
    }

    @Override
    public String toString() {
        return first + " " + second;
    }
}

public class Main {
    public static void main(String... ignored) {
        Scanner input = new Scanner(System.in);
        int numOfPairs = input.nextInt();
        List<Pair> pairs = new ArrayList<Pair>();
        for(int i = 0; i < numOfPairs;i++) {
            int first = input.nextInt();
            int second = input.nextInt();
            pairs.add(new Pair(first, second));
        }
        for (Pair pair : pairs) 
            System.out.println(pair);
    }
}
于 2013-01-07T16:57:33.657 に答える
2
    pair[] B = new pair[5010];

要素にのみスペースを割り当てます。5010 Bその配列の各要素をインスタンス化する必要があります。

for(int i = 0; i <B.length;i++)  
{  
    B[i] = new pair();
}

スタイルのもの:

クラス名は大文字で始まります: AAAAではありませんaaaa
また、スターのインポートは悪いです:

import java.util.*;    

と置換する:

import java.util.Scanner;
于 2013-01-07T16:48:35.347 に答える