Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > NullPointerException


Автор: ЛунныйОборотень 4.11.2010, 19:28
Здравствуйте!

Написал программку для ввода данных людей с консоли.

Код

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */



import java.util.ArrayList;
import java.util.Collection;
import java.util.Scanner;

/**
 *
 * @author Simplevolk
 */
public class lab {

    /**
     * @param args the command line arguments
     */
   private static ArrayList<People> peoples;
   // Для шаблона Singletone статическая переменная
    private static lab instance;


    // метод getInstance - проверяtт, инициализирована ли статическая
    // переменная (в случае надобности делает это) и возвращает ее
    public static synchronized lab getInstance() {
        if (instance == null) {
            instance = new lab();
        }
        return instance;
    }



    public ArrayList<People> getPeoples()
    {
    return peoples;
    }
    public void insertPeople(People people)
    {
    peoples.add(people);
    }
    public void deletePeople(People people)

    {
    peoples.remove(people);
    }
    public static void main(String[] args) {
        // TODO code application logic here
      
      int flag=0;
     lab ms=lab.getInstance();
    People p=null;
    
     Scanner input= new Scanner(System.in);
     String str;
      while(flag==0)
      {
       p=new People();

    //  System.out.println("Vvedite ID: ");
    //  str=input.next();
    //  p.setPeopleId(Integer.parseInt(str));

       System.out.println("Vvedite Familiy:");
        
        str=input.next();
        p.setSurName(str);
        
        System.out.println("Vvedite Imia: ");
       
        str=input.next();
        p.setFirstName(str);

        System.out.println("Vvedite Otchestvo: ");
        str=input.next();
        p.setPatronymic(str);
        
        System.out.println("Vvedite pol: ");
        str=input.next();
        p.setSex(str);

        System.out.println("Vvedite Daty:");
        str=input.next();
        p.setDateOfBirth(str);

        System.out.println("Vvedite telefon: ");
        str=input.next();
        p.setTelefone(str);

        System.out.println("Vvedite Mesto: ");
        str=input.next();
        p.setPlace(str);

       peoples.add(p);

        System.out.println("Zakonchit vvod? Yes=1;No=0");
        
         str=input.next();
         flag=Integer.parseInt(str);

        }
     
    System.out.println("Vyvod dannyx: ");
    
        System.out.println(ms.getPeoples());
       
    }

}



Код


import java.text.DateFormat;
import java.util.ArrayList;
import java.util.Date;

/**
 *
 * @author Simplevolk
 */
public class People implements Comparable {

//    private int peopleId;

    // поле ИМЯ
    private String firstName;
    // поле ФАМИЛИЯ
    private String surName;

    // поле ОТЧЕСТВО
    private String patronymic;
    // поле ДАТА РОЖДЕНИЯ
    private String dateOfBirth;
    // поле ПОЛ
    private String sex;
    // телефон
    private String telefone;
    // место встречи
    private String place;


    public String getTelefone()
    {
    return telefone;
    }
    public void setTelefone(String telefon)
    {

    this.telefone=telefon;
    }
    public String getPlace()
    {
    return place;

    }
    public void setPlace(String myplace)
    {
    this.place=myplace;
    }
    public String getDateOfBirth() {
        return dateOfBirth;
    }

    public void setDateOfBirth(String dateOfBirth) {
        this.dateOfBirth = dateOfBirth;
    }



    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }
    public String getFirstName()
    {
    return firstName;
    }
    // get/set для ОТЧЕСТВО
    public String getPatronymic() {
        return patronymic;
    }

    public void setPatronymic(String patronymic) {
        this.patronymic = patronymic;
    }

    // get/set для ФАМИЛИЯ
    public String getSurName() {
        return surName;
    }

    public void setSurName(String surName) {
        this.surName = surName;
    }

    // get/set для ПОЛ
    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }


    
    public int compareTo(Object o) {
        throw new UnsupportedOperationException("Not supported yet.");
    }



}



Но после ввода всех данных вылетает исключение
Код

Exception in thread "main" java.lang.NullPointerException
        at laba5.lab.main(lab.java:97)

Ошибку в коде я выделил жирным шрифтом.

Подскажите в чем дело?

Автор: powerOn 4.11.2010, 20:15
а где происходит инициализация ссылки peoples? (peoples = new ArrayList<People>())

Автор: ЛунныйОборотень 4.11.2010, 20:30
Спасибо, помогло!)

Автор: sergioK 4.11.2010, 21:05
Цитата(ЛунныйОборотень @ 4.11.2010,  20:30)
Спасибо, помогло!)

В таких случаях стоит ставить проверку 

Код

 if(peoples == null ) {
  System.out.println("1111111111111111111");
}


тогда и форум не нужен  smile 


Автор: ЛунныйОборотень 4.11.2010, 22:18
sergioK, спасибо.

Еще один подвопрос-не хочу создавать отдельную тему:(

А как нормально вывести коллекцию?у меня абракадабра выводится.Ну то есть хеши обьектовsmile а вот как сами обьекты? пробовал приводить их к методу toString() но результат тот же...(

Автор: eugine_s 4.11.2010, 23:47
Вопрос не очень корректный. Что значит вывести коллекцию? 

Пройдись по каждому элементу коллекции и выведи в консоль необходимые данные. 

Можно для класс People переопределить метод toString() и использовать его. 

З.Ы. Кстати, Person лучше подходит как название класса People (people переводится как люди).

Автор: nc30 5.11.2010, 08:40
ЛунныйОборотень,
Что-то вроде этого:
Код

public class People implements Comparable {

//...

    @Override
    public String toString() {
        return "Фамилия: " + surName + "\nИмя: " + firstName 
                + "\nОтчество: " + patronymic + "\nДата рождения: " + dateOfBirth 
                + "\nПол: " + sex + "\nТелефон: " + telephone 
                + "\nМесто встречи: " + place + "\n";
    }
}


Кстати, имя класса lab также следовало бы написать с заглавной буквы  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)