-3
public class Author {
private int id;
private String name;
private String university;
private String department;
private String email;
private int article1;
private int article2;
private int article3;
private int article4;
private int article5;
//constructors and getter/setters are generated automatically, not adding to have space
}

これは私の Author クラスです。このクラスにはこれらの属性のみがあります。また、作成者オブジェクトreadDaFileを読み取り、作成するために作成されたクラスがあります。author.txt

import java.util.Scanner;
import java.io.*;


public class readAuthor {

private Scanner reader;
private String temp;
private String[] split;
public Author[] authorList;
private int dummyInt,dummyArticle1=0 ,dummyArticle2=0 ,dummyArticle3=0,dummyArticle4,dummyArticle5;
private int i=0;
private String name , university , department , email ;
public void tryOpeningOrDieTrying(){
 try{
     reader = new Scanner(new File("Author.txt"));
 }
 catch(Exception exo){
 System.out.println("Can not find file.");
 }
}
public void readDaFile(){

    while(reader.hasNext()){
        temp = reader.nextLine();
        split = temp.split(" ");

        name = "NOTGIVEN";
        university = "NOTGIVEN";
        department = "NOTGIVEN";
        email = "NOTGIVEN";
        dummyInt = 0;
        dummyArticle1 = 0;
        dummyArticle2 = 0;
        dummyArticle3 = 0;
        dummyArticle4 = 0;
        dummyArticle5 = 0;

        dummyInt = Integer.parseInt(split[1]);
        if(split.length>2){ name = split[2]; }
        if(split.length>3){ university = split[3]; }
        if(split.length>4){ department = split[4]; }
        if(split.length>5){ email = split[5]; }
        if(split.length>6){ dummyArticle1 = Integer.parseInt(split[6]); }
        if(split.length>7){ dummyArticle2 = Integer.parseInt(split[7]); }
        if(split.length>8){ dummyArticle3 = Integer.parseInt(split[8]); }
        if(split.length>9){ dummyArticle4 = Integer.parseInt(split[9]); }
        if(split.length>10){ dummyArticle5 = Integer.parseInt(split[10]); }

        System.out.println(dummyInt+name+university+department+email+dummyArticle1+dummyArticle2+dummyArticle3+dummyArticle4+dummyArticle5);
        //authorList[i] = new Author(dummyInt,name,university,department,email,dummyArticle1,dummyArticle2,dummyArticle3,dummyArticle4,dummyArticle5);
 i++;
        //System.out.println(split[1]);
    //System.out.println(split.length);
    }
}
public void sealDaGates(){
reader.close();
}
}

最初に行を読んでから、それらをサブ要素に分割して作成者オブジェクトを作成するだけです。ただし、Author.txt はすべての作成者属性を提供しない場合があります。
例えば ​​:

 AUTHOR 100
 AUTHOR 101 Ruonan_Li MIT Computer_Science ruonan@mit.edu 1002001 1002009 1002004

null パラメーターがオーサー コンストラクターに送信されないようにするために、ループごとにすべての属性変数を初期化しています。また、初期化された属性変数をprintf-ing してチェックしました。それらは意図したとおりに機能しているようです。txt から属性を正常に読み取ることができない場合、プログラムはNOTGIVENまたは0コンストラクターに送信します。しかし、まだ私はnullpointerexception行を持っています:

 authorList[i] = new Author(dummyInt,name,university,department,email,dummyArticle1,dummyArticle2,dummyArticle3,dummyArticle4,dummyArticle5);

前もって感謝します

4

2 に答える 2

5

あなたは決して初期化していないauthorListので、それはnullです。失敗しているのはコンストラクター呼び出しではなく、配列への代入です。必要なもの:

authorList = new Author[...];

どこか。または、ほぼ確実に好ましいのは、 aList<Author>を使用することです。

private final List<Author> authorList = new ArrayList<Author>();
于 2013-04-22T12:47:37.303 に答える
0

authorList配列の初期化を忘れたようです。コンストラクターで、この行を追加するauthorList = new Author[100];と、修正されるはずです。100必要な数の要素に変更します。

于 2013-04-22T12:56:47.767 に答える