• 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

Object Storage Arubacloud
0 głosów
139 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,820 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,093 wizyt
pytanie zadane 8 sierpnia 2016 w Java przez niezalogowany
0 głosów
1 odpowiedź 1,246 wizyt
pytanie zadane 26 marca 2017 w Java przez BartekDataIT Użytkownik (770 p.)
0 głosów
3 odpowiedzi 422 wizyt

92,555 zapytań

141,403 odpowiedzi

319,557 komentarzy

61,940 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...