• 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

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
170 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,371 wizyt
pytanie zadane 8 sierpnia 2016 w Java przez niezalogowany
0 głosów
1 odpowiedź 1,322 wizyt
pytanie zadane 26 marca 2017 w Java przez BartekDataIT Użytkownik (770 p.)
0 głosów
3 odpowiedzi 600 wizyt

93,176 zapytań

142,186 odpowiedzi

321,980 komentarzy

62,507 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 1637p. - dia-Chann
  2. 1614p. - Łukasz Piwowar
  3. 1599p. - CC PL
  4. 1597p. - Łukasz Eckert
  5. 1572p. - Tomasz Bielak
  6. 1537p. - Łukasz Siedlecki
  7. 1531p. - rucin93
  8. 1509p. - rafalszastok
  9. 1356p. - ssynowiec
  10. 1341p. - Mikbac
  11. 1328p. - Michal Drewniak
  12. 1273p. - Adrian Wieprzkowicz
  13. 1169p. - Grzegorz Aleksander Klementowski
  14. 1155p. - Piotr Aleksandrowicz
  15. 1149p. - Michał Telesz
Szczegóły i pełne wyniki

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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...