我想使用stringtokenizer将字符串存储到对象User数组中,但收到错误消息

时间:2018-10-13 19:25:47

标签: java stringtokenizer

我在成员处收到一条错误消息,指出线程“ main”中的异常java.lang.NullPointerException。在Main.main(Main.java:9)上初始化(Members.java:23) 我想做的是使用StringTokenizer将文件输入中的字符串存储到对象数组中。

在主行中,第9行只是初始化对象,代码为:Member Members = new Members(“ users.txt”);

第23行是类成员是:users [nm] .setId(st.nextToken());

我不知道是什么错误。

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

public class Members {
int nm = 0; //Number of members
User [] users = new User[100]; //Assuming max 
number of user is 100
StringTokenizer st;
Scanner s1;
File f1;
String var1; //this string determines if it a standard or admin user;
String var2;

public Members(String fn) throws FileNotFoundException {
    f1 = new File(fn);
    s1 = new Scanner(f1);

    while(s1.hasNext()) {
        //System.out.println("true");
        st = new StringTokenizer(s1.nextLine(),"/");
        while(st.hasMoreTokens())
        {
            //System.out.print(((String)st.nextToken()));
            users[nm].setId(st.nextToken());
            users[nm].setPw(st.nextToken());
            var1 = st.nextToken();
            users[nm].setFn(st.nextToken());
            users[nm].setLn(st.nextToken());
            users[nm].setEmail(st.nextToken());
            //System.out.print(st.nextToken() + " ");
            if(var1.equals("Admin")) {
                users[nm].setAdmin(true);
                ((Admin)users[nm]).setRank(st.nextToken());
            }
            if(var1.equals("Standard")) {
                users[nm].setStandard(true);
                while(st.hasMoreTokens())
                {
                    ((Standard)users[nm]).addCar(st.nextToken());
                }

            }
        }

        nm++;

        System.out.println();
    }

    s1.close();
    System.out.println("Number of members: " + nm);
}

2 个答案:

答案 0 :(得分:0)

您正在创建一个可以容纳Users的数组,但是据我所知,您没有创建User的任何实例。首次尝试引用users[nm]时,其值为null

您可以执行以下操作:

users[nm] = new User();
users[nm].setId(st.nextToken());

答案 1 :(得分:0)

罪魁祸首是User [] users = new User[100]; //Assuming max

这仅创建大小为100的数组。没有创建任何对象。您正在将Id设置为空对象。在设置ID之前,您必须初始化用户对象。