0
import java.util.Scanner;
import java.lang.Integer;
public class points{
    private class Vertex{
        public int xcoord,ycoord;
        public Vertex right,left;
    }    
    public points(){
        Scanner input = new Scanner(System.in);
        int no_of_pts = Integer.parseInt(input.nextLine());
        Vertex[] polygon = new Vertex[no_of_pts];        
        for(int i=0;i<no_of_pts;i++){
            String line = input.nextLine();
            String[] check = line.split(" ");           
            polygon[i].xcoord = Integer.parseInt(check[0]);
            polygon[i].ycoord = Integer.parseInt(check[1]);
        }    
    }    
    public static void main(String[] args){
        new points();    
    }    
}

これは、x座標とy座標を使用してn個の点をシステムに入力する非常に単純なプログラムです

Sample Input :
3
1 2
3 4
5 6

ただし、「1 2」を入力すると NullPointerException がスローされます。Javaデバッグを使用して、問題のある行を見つけました

polygon[i].xcoord = Integer.parseInt(check[0]);

ただし、チェック変数は '1' と '2' を正しく表示します。何がうまくいかないのですか?

編集:答えのおかげで、配列の各要素を新しいオブジェクトに初期化する必要があることに気付きました

polygon[i] = new Vertex();
4

2 に答える 2

4

配列内の頂点参照が null であるためです。

import java.util.Scanner;
import java.lang.Integer;
public class points{
    private class Vertex{
        public int xcoord,ycoord;
        public Vertex right,left;
    }    
    public points(){
        Scanner input = new Scanner(System.in);
        int no_of_pts = Integer.parseInt(input.nextLine());
        Vertex[] polygon = new Vertex[no_of_pts];        
        for(int i=0;i<no_of_pts;i++){
            String line = input.nextLine();
            String[] check = line.split(" "); 
            polygon[i] = new Vertex(); // this is what you need.          
            polygon[i].xcoord = Integer.parseInt(check[0]);
            polygon[i].ycoord = Integer.parseInt(check[1]);
        }    
    }    
    public static void main(String[] args){
        new points();    
    }    
}
于 2012-10-06T15:29:12.207 に答える
1

polygon[i] は初期化されていないため null です

于 2012-10-06T15:33:28.077 に答える