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



我收到一个错误,在线程"main"java.lang.NullPointerException at Members中显示Exception。init(Members.java:23)位于Main.Main(Main.java:9)我正在尝试使用StringTokenizer将文件输入中的字符串存储到对象数组中。

在main中,第9行只是启动对象,代码为:Members Members=new Members("users.txt");

第23行是类Members是: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);
}

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

你可以这样做:

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

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

这只是在创建一个大小为100的数组。未创建任何对象。您正在将Id设置为空对象。在设置Id之前,您必须初始化用户对象。

最新更新