Skocz do zawartości
spacer.png
spacer.png

Java - dodanie obiektu do tablicy


wojnar

Rekomendowane odpowiedzi

Opublikowano

Panowie, rozwiązanie jest z pewnością trywialne, ale ja nie mogę go dostrzec.

Chodzi o to, że nie wiem jak dodać obiekt do tablicy w klasie "Pozycje". Program prosi o dodanie atrybutów obiektu, ale w tej klasie ich nie ma.

Nie mogę skorzystać z dziedziczenia, bo w zadaniu jest wyraźnie podane, że mam stworzyć konstruktory w klasie "Zamówienie" - a jak dodam w tej klasie "extends Pozycja" to wtedy wywala błąd konstruktorów "there is no default constructor available".

Jakieś pomysły?

Spoiler

import org.apache.commons.lang3.StringUtils;
import java.util.*;
import java.io.*;
import java.lang.Object;


public class obiekty {
    public static void main(String[] args) {
       // List<Pozycja> pozycjas = new ArrayList(); - Lista obiektów (zwykle używane do wyświetlenia wszystkich obiektów
        Pozycja p1 = new Pozycja("Chleb", 4,3.5);
        Pozycja p2 = new Pozycja("Masło", 2,2);
        System.out.println(p1);
        System.out.println(p2);
       // pozycjas.add(p1);
       // pozycjas.add(p2);
      //  System.out.println(pozycjas);

        Zamowienie z = new Zamowienie();
        z.dodajPozycje(p1);
        z.dodajPozycje(p2);
        System.out.println(z);

    }
}

class Zamowienie{
        int i =0 ;
        int ileDodanych;
        int maksRozmiar=10;
    Pozycja pozycje[] = new Pozycja[maksRozmiar];

        Zamowienie(){
            maksRozmiar = 10;
        }
        Zamowienie(int maksRozmiar){
        this.maksRozmiar = maksRozmiar;
        }
        void dodajPozycje(Pozycja p){
           // pozycje[i] = new Pozycja(); //TUTAJ PROSI MNIE O PODANIE ARGUMENTÓW DLA "POZYCJA". NIE MA DZIEDZICZENIA, WIEC NIE WIDZI TYCH ARGUMENTÓW
        }
        double ObliczWartosc(){
            return 1;
        }
        public String toString(){
            return "Zamowienie:";
        }
}

class Pozycja {
    String nazwaTowaru;
    int ileSztuk;
    double cena;

        Pozycja(String nazwaTowaru, int ileSztuk, double cena) {
            this.nazwaTowaru = nazwaTowaru;
            this.ileSztuk = ileSztuk;
            this.cena = cena;
    }

    double obliczWartosc(){
            double wartosc = ileSztuk*cena;
            return wartosc;
    }

    public String toString(){
        return StringUtils.rightPad(nazwaTowaru, 20)+StringUtils.rightPad(String.valueOf(cena)+"zł",10)+StringUtils.rightPad(String.valueOf(ileSztuk), 4)+obliczWartosc()+"zł";
    }
}
Opublikowano

Rozwiązania:

1. Zamiast tablicy pozycji zrób ArrayList.

https://repl.it/FDEz/1

2. Jeśli musisz używać tablicy, stwórz pole statyczne, które będzie zawierało ID następnej pozycji (ale nie będzie to działało tak po prostu z wieloma zamówieniami)

https://repl.it/FDEz/0

Opublikowano (edytowane)

ArrayList dobry pomysł, jednak chciałem to zrobić bez jego użycia.

Punkt numer 2 - spróbuję jutro, może coś z tego będzie :D Dzięki za pomoc, oczywiście nagradzam reputem, jak będę miał jakieś problemy to dam znać, prosze nie zamykać tematu @Harry

Edytowane przez Harry
ZAŁATWIONE, dzięki za info :)
Opublikowano
12 godzin temu, wojnar napisał:

ArrayList dobry pomysł, jednak chciałem to zrobić bez jego użycia.

Punkt numer 2 - spróbuję jutro, może coś z tego będzie :D Dzięki za pomoc, oczywiście nagradzam reputem, jak będę miał jakieś problemy to dam znać, prosze nie zamykać tematu @Harry

https://repl.it/FDEz/3

Poleciałem wtedy z tym polem statycznym, wystarczy zwykłe. Miałem coś innego w głowie i tak wyszło. To będzie działało bez problemu z wieloma zamówieniami.

Opublikowano

Że ja tego nie zauważyłem... :o Tak jak myślałem, odpowiedź była trywialna :) Dzięki!

Ogólnie juz prawie wszystko, tylko teraz zwracając zamówienie muszę wyświetlić wszystkie pozycje tego zamówienia. Jak to zrobić? Oczywiście dałoby się w pętli wyświetlić wszystkie obiekty z tablicy, ale ja muszę to zrobić po słówku return. Kod poniżej i napisałem gdzie to powinno być:

Spoiler

import org.apache.commons.lang3.StringUtils;
import java.util.*;
import java.io.*;
import java.lang.Object;


public class obiekty {
    public static void main(String[] args) {
       // List<Pozycja> pozycjas = new ArrayList(); - Lista obiektów (zwykle używane do wyświetlenia wszystkich obiektów
        Pozycja p1 = new Pozycja("Chleb", 1,3.5);
        Pozycja p2 = new Pozycja("Cukier", 3,4);
        System.out.println(p1);
        System.out.println(p2);
       // pozycjas.add(p1);
       // pozycjas.add(p2);
      //  System.out.println(pozycjas);

        Zamowienie z = new Zamowienie();
        z.dodajPozycje(p1);
        z.dodajPozycje(p2);
        System.out.println(z);

    }
}

class Zamowienie{
        int i =0 ;
        double wartoscZamowienia=0;
        int ileDodanych;
        int maksRozmiar=10;
    Pozycja pozycje[] = new Pozycja[maksRozmiar];

        Zamowienie(){
            maksRozmiar = 10;
        }
        Zamowienie(int maksRozmiar){
        this.maksRozmiar = maksRozmiar;
        }
        void dodajPozycje(Pozycja p){
            pozycje[i] = p;
            ObliczWartosc();
            i++;
        }
        double ObliczWartosc(){
                wartoscZamowienia+=pozycje[i].obliczWartosc();
                return wartoscZamowienia;
        }

        public String toString(){
            return "Twoje zamowienie: "+"TUTAJ POWINNY SIE POJAWIC POZYCJE ZAMOWIENIA "+"Całkowita wartość zamówienia: "+wartoscZamowienia+"zł";
        }
}

class Pozycja {
    String nazwaTowaru;
    int ileSztuk;
    double cena;

       Pozycja(String nazwaTowaru, int ileSztuk, double cena) {
            this.nazwaTowaru = nazwaTowaru;
            this.ileSztuk = ileSztuk;
            this.cena = cena;
    }

    double obliczWartosc(){
            double wartosc = ileSztuk*cena;
            return wartosc;
    }

    public String toString(){
        return StringUtils.rightPad(nazwaTowaru, 20)+StringUtils.rightPad(String.valueOf(cena)+"zł",10)+StringUtils.rightPad(String.valueOf(ileSztuk), 4)+obliczWartosc()+"zł";
    }
}

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Tylko zalogowani użytkownicy mogą dodawać komentarze.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się

spacer.png

spacer.png

×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Ta strona korzysta z ciasteczek, aby świadczyć usługi na najwyższym poziomie. Dalsze korzystanie z witryny oznacza zgodę na ich wykorzystanie. Polityka prywatności .