• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Problem z nadaniem wartości obiektowi

0 głosów
311 wizyt
pytanie zadane 19 listopada 2016 w Java przez dmn Nowicjusz (220 p.)

Witam, dopiero uczę się programować w języku Java i mam problem z nadaniem wartości obiektowi. 

package com.company;

import java.util.Scanner;

public class Firma {
    public static void main(String[] args){
        Pracownik[] pracownik = new Pracownik[3];
        Scanner odczyt = new Scanner(System.in);

        for(int i=0;i<3;i++)
        {
            pracownik[i].imie = odczyt.nextLine();
            pracownik[i].nazwisko = odczyt.nextLine();
            pracownik[i].wiek = odczyt.nextInt();
        }

        int n = odczyt.nextInt();
        pracownik[n].wyswietlDane();
    }
}

Po odpaleniu powyższego kodu wyskakuje mi następujący błąd: Exception in thread "main" java.lang.NullPointerException

Co tutaj jest źle? Co powinienem poprawić?

3 odpowiedzi

+2 głosów
odpowiedź 19 listopada 2016 przez ribeiro Stary wyjadacz (11,440 p.)
       for(int i=0;i<3;i++)
        {
            pracownik[i].imie = odczyt.nextLine();
            pracownik[i].nazwisko = odczyt.nextLine();
            pracownik[i].wiek = odczyt.nextInt();
        }

W każdej iteracji pętli dopisujesz wartości pewnych składowych obiektu pracownik, który nie istnieje. Obiekt pracownik[i] musi być wpierw zainicjowany za pomocą new Pracownik();. Zapytasz co robi w takim razie wiersz:

        Pracownik[] pracownik = new Pracownik[3];

Tutaj słowo kluczowe new odnosi się do stworzenia nowej tablicy i przypisania referencji do niej zmiennej pracownik. Tablica ta jest jednak wciaż pusta (wypełniona nullami).

+1 głos
odpowiedź 19 listopada 2016 przez mrcnsct Nałogowiec (36,390 p.)
Zrobiłeś tablicę na 3 obiekty typu Pracownik (3 referencje do obiektów typu Pracownik), ale nie utworzyłeś tych obiektów. W pętli for na początku zrób: pracownik[i]=new Pracownik().
0 głosów
odpowiedź 19 listopada 2016 przez KubenQPL Maniak (62,840 p.)

Razem z Exception powinno ci wskazać numer lini gdzie wystąpił wyjątek.

MainClass.java:11 

11 oznacza numer linii. 

Podobne pytania

+1 głos
3 odpowiedzi 1,664 wizyt
pytanie zadane 8 sierpnia 2016 w Java przez niezalogowany
0 głosów
1 odpowiedź 1,523 wizyt
pytanie zadane 26 marca 2017 w Java przez BartekDataIT Użytkownik (770 p.)
0 głosów
3 odpowiedzi 876 wizyt

93,762 zapytań

142,718 odpowiedzi

323,368 komentarzy

63,359 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...