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

Przekazywanie obiektów do tablicy.

VPS Starter Arubacloud
0 głosów
2,115 wizyt
pytanie zadane 8 września 2016 w Java przez nemezisso Użytkownik (860 p.)

Witam.

Mam problem z zadaniem zamówienie: http://www.jkozak.pl/przedmioty/java/zadania7.pdf .

Problemem jest przekazanie obiektu z klasy Pozycja do metody z klasy Zamówienie "void dodajPozycje(Pozycja p)". Nie bardzo wiem jak to ma wyglądać. Chciałem w klasie Zamówienie zrobić tablicę obiektów Pozycja i w/w metodzie dodawać kolejno obiekty. Niestety coś mi to nie działa. Może ktoś mnie naprowadzić co i jak :D?

W klasie Zamówienie nie działa też metoda obliczWartosc. Tzn. bez pętli for jest ok, a z problem przy zwróceniu 'x'. 

Class Pozycja-

public class Pozycja {
    private String nazwaTowaru;
    private static int ileSztuk;
    private static double cena;
    
    public Pozycja(String n, int s,double c){
        this.nazwaTowaru=n;this.ileSztuk=s;this.cena=c;
    }
    
    public double obliczWartosc(){
        double x=ileSztuk*cena;
        return x;
    }
    public String toString(){
        return nazwaTowaru+"         "+cena+"zł  "+ileSztuk+"szt.    "+obliczWartosc()+"zł";
    }
    
}

Class Zamówienie- 

public class Zamownienie {
    private static int ileDanych,maxRozmiar,nextID;
    private Pozycja[] lista;
    
    public Zamownienie(){this(10);}
    public Zamownienie(int maxRozmiar){
        this.maxRozmiar=maxRozmiar;
    }
   
    public void dodajPozycje(Pozycja p){
        this.lista[nextID]=p;
        nextID++;
    }
    public double obliczWartosc(){
        double x;
       for(int i=0;i<lista.length;i++)
            x+=lista[nextID].obliczWartosc();
        return x;  
    }
    public String toString(){
        return "  Razem: "+obliczWartosc();
    }
    static { nextID=0;}
}

Main- 

package zadanie.zamownienie;
public class ZadanieZamownienie {
    
    public static void main(String[] args) {
        Pozycja k=new Pozycja("Cukier",3,5);
        System.out.println(k);
        Pozycja x=new Pozycja("Chleb",2,4);
        System.out.println(x);
        
        Zamownienie z= new Zamownienie(20);
        z.dodajPozycje(k);
        z.dodajPozycje(x);
        System.out.println(z);
    }
    
}

 

komentarz 8 września 2016 przez MichuDev Pasjonat (20,300 p.)
co gdy next_id będzie większe niż rozmiar tablicy ?
komentarz 8 września 2016 przez nemezisso Użytkownik (860 p.)
Na wejściu jest 0 dopiero potem inkrementacja, więc nie powinno się tak zdarzyć. No ale w klasie Zamówienie metoda obliczWartość powinna zaczynać się od 0 a nie nextID to tu jest błąd :D. Pozostał jednak ten z przekazywaniem obiektów w tablice :/

1 odpowiedź

+1 głos
odpowiedź 9 września 2016 przez K0XM4N Gaduła (3,640 p.)
wybrane 9 września 2016 przez nemezisso
 
Najlepsza

Cześć!

Problemem jest przekazanie obiektu z klasy Pozycja do metody z klasy Zamówienie "void dodajPozycje(Pozycja p)". Nie bardzo wiem jak to ma wyglądać. Chciałem w klasie Zamówienie zrobić tablicę obiektów Pozycja i w/w metodzie dodawać kolejno obiekty. Niestety coś mi to nie działa. Może ktoś mnie naprowadzić co i jak :D?

Zgadza się. Problemem było przekazanie obiektu do tablicy. Popatrz na ten kod:


private Pozycja[] lista;

Utworzyłeś zmienną referencyjną do obiektu tablicowego lista, ale....! Referencja jest pusta. Co chcesz dodawać do tablicy która jeszcze nie istnieje? Ba! nawet podajesz jej konkretny index :P

public void dodajPozycje(Pozycja p){
        this.lista[nextID]=p;
        nextID++;
    }


 Podczas kompilowania programu na pewno dostałeś NullPointerException. Dlaczego? Bo nigdzie w Twoim kodzie nie przypisałeś do referencji utworzonego obiektu tablicowego o określonym rozmiarze.
Zrób to w konstruktorze w ten sposób:

 

public Zamownienie(int maxRozmiar){
        this.maxRozmiar=maxRozmiar;
        this.lista = new Pozycja[maxRozmiar];
    }


 

 

komentarz 9 września 2016 przez nemezisso Użytkownik (860 p.)
Faktycznie. Zapomniałem o tym. Dziękuję za pomoc :).
komentarz 9 września 2016 przez nemezisso Użytkownik (860 p.)
public void dodajPozycje(Pozycja p){
        this.lista[nextID]=p;
        nextID++;
}

Tyle, że teraz mam w tablicy nazwę obiektu ale bez jego wartości (bez pól). Tj. ostatni utworzony obiekt typu Pozycja dodaje w mojej tablicy takie same wartości cen i sztuk w każdym elemencie tablicy zmienia się tylko nazwa obiektu. 

komentarz 12 września 2016 przez K0XM4N Gaduła (3,640 p.)
Zauważyłem, że już w pewien sposób rozwiązałeś swój problem w innym wątku ;) Zmienne statyczne i wszystko jasne :P

Podobne pytania

0 głosów
2 odpowiedzi 625 wizyt
pytanie zadane 11 maja 2016 w C i C++ przez sebask08 Użytkownik (510 p.)
0 głosów
0 odpowiedzi 487 wizyt
pytanie zadane 25 października 2016 w Java przez K0XM4N Gaduła (3,640 p.)
0 głosów
1 odpowiedź 300 wizyt
pytanie zadane 11 stycznia 2021 w Java przez Lulex Użytkownik (820 p.)

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...