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

Przekazywanie obiektów do tablicy.

0 głosów
2,611 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 1,019 wizyt
pytanie zadane 11 maja 2016 w C i C++ przez sebask08 Użytkownik (510 p.)
0 głosów
0 odpowiedzi 559 wizyt
pytanie zadane 25 października 2016 w Java przez K0XM4N Gaduła (3,640 p.)
0 głosów
1 odpowiedź 586 wizyt
pytanie zadane 11 stycznia 2021 w Java przez Lulex Użytkownik (820 p.)

93,742 zapytań

142,680 odpowiedzi

323,299 komentarzy

63,328 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.

...