Я хочу использовать stringtokenizer для хранения строк в массиве пользователя объекта, но получить сообщение об ошибке - PullRequest
0 голосов
/ 13 октября 2018

Я получаю сообщение об ошибке «Исключение» в потоке «main» java.lang.NullPointerException у участников.init (Members.java:23) в Main.main (Main.java:9) И что я пытаюсь сделать, это использовать StringTokenizer для хранения строк из файла, введенного в массив объектов и.

Inmain, строка 9 просто инициирует объект, и код выглядит следующим образом: Members 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 голосов
/ 13 октября 2018

Основной виновник - User [] users = new User[100]; //Assuming max

Это создает только массив размером 100.Не создание какого-либо объекта.Вы устанавливаете Id для нулевого объекта.Перед установкой идентификатора вы должны инициализировать ваш пользовательский объект.

0 голосов
/ 13 октября 2018

Вы создаете массив, который может содержать Users, но, насколько я могу судить, вы не создаете никаких экземпляров User.Когда вы впервые попытаетесь сослаться на users[nm], его значение будет null.

. Вы можете сделать что-то вроде этого:

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