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

Przekazywanie obiektów do tablicy.

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

92,576 zapytań

141,426 odpowiedzi

319,651 komentarzy

61,961 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!

...