java - 我想使用 stringtokenizer 将字符串存储到对象用户数组中,但收到错误消息
问题描述
我收到一个错误,在成员的线程“main”java.lang.NullPointerException 中出现异常。Main.main(Main.java:9) 处的 init (Members.java:23) 而我要做的是使用 StringTokenizer 将字符串从文件输入存储到对象数组中。
在main中,第9行只是启动对象,代码是:Members 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);
}
解决方案
您正在创建一个可以容纳的数组Users
,但据我所知,您没有创建任何User
. 当你第一次尝试引用users[nm]
它时,它的值将是null
.
你可以这样做:
users[nm] = new User();
users[nm].setId(st.nextToken());
推荐阅读
- python - python在单个矩阵中转换矩阵列表
- tensorflow - tf 指标与 tf.math.count_nonzero
- python - 我需要找到一个适合该功能的列表
- php - Vos 修改代码 PHP ont été annulées en raison d'une erreur sur la ligne 296 语法错误,意外 '=',期待 ')'
- security - 在 Apache Ignite 中激活集群
- python - 如何将测试套件从 unittest 转换为 pytest?
- hadoop - HIVE - 将 select 语句的结果作为多条记录插入配置单元表而不覆盖现有内容
- angular - 为什么我们有时订阅 observable 有时不订阅?
- r - R:如何对问卷项目进行分组?
- java - 通过 JButton 访问存储的变量