Co robie tutaj zle?

Odpowiedz Nowy wątek
2016-01-26 18:59
Nie ma znaczenia
0

Witam,
Czy ktoś jest w stanie powiedzieć mi co robię tutaj źle ?
main

import java.util.Scanner;
public class Silnik {

    public static void main(String[] args) {

        int wybor;
        Scanner sc = new Scanner(System.in);
        wybor = sc.nextInt();
        Pizza pizza = new Pizza();
        System.out.println("\tProgram: Zarządzanie Restauracją \' WENECJA \' ");
        System.out.println("Wybierz liczbe: ");
        System.out.println("1. Stworz menu(cennik).");
        System.out.println("2. Wyswietl menu(cennik).");
        System.out.print("Twoj wybor to : " + wybor);
        switch(wybor){
            case 1: {
                pizza.StworzMenu();
                break;
            }

            case 2: {
                pizza.wyswietlMenu();
                break;
            }

            default: {
                System.out.println("Podales zly numer. Prosze podac jeszcze raz");
                sc.nextInt();
            }

        sc.close();

        }
    }
}

Skladniki


import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Skladniki extends Pizza {

Scanner sc = new Scanner(System.in);
List<String> skladniki = new ArrayList<String>(10);
int ile_skladnikow;

public void dodajSkladniki()
{           //odczyt
            //nowa lista rzutowanie stringow

    System.out.println("Prosze podac liczbe skladnikow od 1 do 10(w dodawanej PIZZY do pozycji menu ): ") ;     //liczba skladnikow
    ile_skladnikow = sc.nextInt();
    if((ile_skladnikow <1) || (ile_skladnikow>10))
    {
        ile_skladnikow=sc.nextInt();
    }
    else{
    System.out.println("Wypisz skladniki  (UWAGA:wcisniecie ENTER powoduje przejscie do nastepnego skladnika): ");
    for (int j=0; j<ile_skladnikow; j++)
    {
    skladniki.add(sc.nextLine());
    }

    }
}

public void wyswietlSkladniki()
{

    for (int i=0; i<ile_skladnikow; i++)
    {
        System.out.println("Skladnik " + i + " to: " + skladniki.get(i));
    }

}

}

Pizza

import java.util.Scanner;

    public class Pizza {

        public int ile;
        Scanner sc = new Scanner(System.in);
        int[] pozycja = new int[ile-1];
        int[] cena = new int[ile-1];
        String[] nazwa = new String[ile-1];
        Skladniki skladniki = new Skladniki();

            public String StworzMenu(){
                System.out.println("Ile chcesz dodac pozycji: ");
                ile = sc.nextInt();
                    for(int i=0; i<ile ; i++){
                        pozycja[i]=i++;
                        System.out.println("Prosze podac nazwe pizzy: ");
                        nazwa[i]=sc.nextLine();
                        System.out.println("Prosze podac cene pizzy: ");
                        cena[i]= sc.nextInt();
                        skladniki.dodajSkladniki();
                        System.out.println("Dodano do menu.");
                    }
                    return pozycja + ". " + nazwa + " | " + cena + " zl | " + skladniki;
            }

            public void wyswietlMenu(){
                if(pozycja.length<0){
                    System.out.println("Najpierw musisz dodac cos do menu.");
                }
                    else{
                        for(int j=0; j<pozycja.length; j++){
                            System.out.println(pozycja[j] + ". " + nazwa[j] + ", " + cena[j] + ", " + skladniki);
                        }
                    }
            }

}
czemu masz nick "nie ma znaczenia" . jak to nie ma jak ma - karolinaa 2016-01-27 08:40

Pozostało 580 znaków

2016-01-26 19:01
0

No a napisz w czym masz problem ? Dlaczego Składniki dziedziczą po Pizzy ? Na chłopski rozum to pizza zawiera kolekcję - listę składników.

Pozostało 580 znaków

2016-01-26 19:06
D3X
0

A co Tobie nie działa?
Plus tak jak powyżej? Pizza zawiera pole z obiektem Składniki. A klasa składniki dziedziczy po pizzy? Dziwnie tak ;)

Pozostało 580 znaków

2016-01-26 19:09
Nie ma znaczenia
0

Zmieniłem dziedziczenie na odwrót, dzięki za podpowiedź.
Problem w tym, że jak to kompiluje to nic nie wyskakuje mi w konsoli.
Natomiast wydaje mi się, że powinno wyskakiwać:

 Program: Zarządzanie Restauracją ' WENECJA '
Wybierz liczbe: 
1. Stworz menu(cennik).
2. Wyswietl menu(cennik).
Twoj wybor to: 

Pozostało 580 znaków

2016-01-26 19:15
0

Scanner daj po wypisywaniu menu wyboru

Pozostało 580 znaków

2016-01-26 19:18
Nie ma znaczenia
0

Exception in thread "main" java.lang.NegativeArraySizeException
at Pizza.<init>(Pizza.java:7)
at Silnik.main(Silnik.java:8)

chodzi o linijki:
int[] pozycja = new int[ile-1];
Pizza pizza = new Pizza();

Pozostało 580 znaków

2016-01-26 19:22
Nie ma znaczenia
0

Juz dziala, zle zinterpretowalem to co mi napisales. Dzieki wielkie Panowie. Jakbym mial dalszy problem to sie odezwe :)

Pozostało 580 znaków

2016-01-26 20:09
2

Zmieniłem dziedziczenie na odwrót
Co, co, co?
Pizza nie dziedziczy po składnikach, tylko składa się z nich (zawiera ich listę).
To tak, jakbyś Ty dziedziczył z węgla, bo się z niego składasz w pewnej częsci.


edytowany 1x, ostatnio: Patryk27, 2016-01-26 20:10
Mam tonę węgla w piwnicy. To ile po nim dziedziczę? :D - Sarrus 2016-01-27 09:28
Trzy Liskovy ;P - Patryk27 2016-01-27 09:30

Pozostało 580 znaków

2016-01-26 20:37
Nie ma znaczenia
0

Przepraszam za spam, juz zakładam konto, ale mam jeszcze jeden problem.

    Program: Zarządzanie Restauracją ' WENECJA ' 
Wybierz liczbe: 
1. Stworz menu(cennik).
2. Wyswietl menu(cennik).
1
Twoj wybor to : 1
Ile chcesz dodac pozycji: 
5
Prosze podac nazwe pizzy: 
Prosze podac cene pizzy: 

To mi się wyświetla po uruchomieniu programu i kliknieciu. Chodzi mi o to, zeby w petli for nie przeskakiwalo Od razu na cenę pizzy, tylko żebym mogl wpisac nazwę. W przypadku dalszych pizz działa normalnie.
Przerobilem troche kod i wiem, ze metoda wyswietlMenu nie dziala, ma ktos moze pomysl, jak wyswietlic to co dala metoda stworzMenu w prosty sposob i jak obejsc ta petle for. Kod zrodlowy

 import java.util.Scanner;

    public class Pizza{
        public int  ile_skladnikow;
        public int ile;
        Scanner sc = new Scanner(System.in);

                public int ileDodac(){
                    System.out.println("Ile chcesz dodac pozycji: ");
                    return ile = sc.nextInt();
                    }

                public String[] stworzMenu(){

                    ileDodac();
                    String[] stats = new String[ile];
                    int[] pozycja = new int[ile];
                    int[] cena = new int[ile];
                    String[] nazwa = new String[ile];

                    for(int i=0; i<ile ; i++){

                        System.out.println("Prosze podac nazwe pizzy: ");
                        nazwa[i]=sc.nextLine();
                        System.out.println("Prosze podac cene pizzy: ");
                        cena[i]= sc.nextInt();
                        System.out.println("Ile chcesz dodac skladnikow: ");
                        ile_skladnikow =sc.nextInt();
                        String[] skladniki = new String[ile_skladnikow];
                        System.out.println("Wypisz skladniki pojedynczo, a nastepnie kliknij ENTER.");
                            for (int j=0; j<ile_skladnikow; j++){
                            skladniki[j]=sc.nextLine(); 

                            }
                            pozycja[i]=i++;
                        System.out.println("Dodano do menu.");
                    stats[i] = pozycja[i] + ". " + nazwa[i] + ". " +cena[i] + skladniki[i];

                    }
                    return stats;
                    }

            public void wyswietlMenu(){
                ileDodac();
                for (int i=0 ; i< ileDodac(); i++){
        //      System.out.println(stats);
                }
            }

}
 import java.util.Scanner;
public class Silnik {

    public static void main(String[] args) {

        int wybor;

        Pizza pizza = new Pizza();
        System.out.println("\tProgram: Zarządzanie Restauracją \' WENECJA \' ");
        System.out.println("Wybierz liczbe: ");
        System.out.println("1. Stworz menu(cennik).");
        System.out.println("2. Wyswietl menu(cennik).");
        Scanner sc = new Scanner(System.in);
        wybor = sc.nextInt();
        System.out.print("Twoj wybor to : " + wybor + "\n");

        switch(wybor){
            case 1: {
                pizza.stworzMenu();
                break;
            }

            case 2: {
                pizza.wyswietlMenu();
                break;
            }

            default: {
                System.out.println("Podales zly numer. Prosze podac jeszcze raz");
                wybor = sc.nextInt();
            }

        sc.close();

        }
    }
}

Pozostało 580 znaków

2016-01-27 03:19
0

Założyłem konto, więc nie będę więcej spamował tylko edytował ten kod.
Proszę o pomoc - mam ważne pytanie.
Jak skutecznie wywołać metody addPizza() oraz showMenu() ?
Czy da się to zrobić bez wywoływania obiektu?
Ewentualnie, jak przerobić kod.

 import java.util.Scanner;
public class Silnik{
public static void main(String[] args) {
            int wybor;

            System.out.println("\tProgram: Zarządzanie Restauracją \' WENECJA \' ");
            System.out.println("Wybierz liczbe: ");
            System.out.println("1. Stworz menu(cennik).");
            System.out.println("2. Wyswietl menu(cennik).");
            Scanner sc = new Scanner(System.in);
            wybor = sc.nextInt();
            System.out.print("Twoj wybor to : " + wybor + "\n");

            switch(wybor){
                case 1: {
                    addPizza();
                    break;
                }

                case 2: {
                    showMenu();
                    break;
                }

                default: {
                    System.out.println("Podales zly numer. Prosze podac jeszcze raz");
                    wybor = sc.nextInt();
                }

            sc.close();

            }
        }

}
 import java.util.Scanner;

public class Restauracja {
                    //ZMIENNE
int ile;                        // ile dodac pozycji, zmienna ktora pomaga w petli wczytywana przez uzytkownika
int pozycja;                    //pozycja pizzy
String nazwa;                   //nazwa pizzy
String skladniki;               //skladniki pizzy
int cena;
Restauracja menu[] = new Restauracja[20];  // deklaracja tablicy obiektow klasy, nie wiecej niz 20 pozycji

                    // KONSTRUKTORY
    public Restauracja (){
        this.pozycja = 0;
        this.nazwa = "";
        this.skladniki = "";
        this.cena = 0;
    }
    public Restauracja(int pozycja,String nazwa, String skladniki, int cena){
        this.pozycja = pozycja;
        this.nazwa = nazwa;
        this.skladniki = skladniki;
        this.cena = cena;

    }
    public Restauracja(int pozycja, String nazwa, String skladniki){
        this.pozycja = pozycja;
        this.nazwa = nazwa;
        this.skladniki = skladniki;

    }
    public Restauracja(int pozycja, String nazwa, int cena){
        this.pozycja = pozycja;
        this.nazwa = nazwa;
        this.cena = cena;
    }
    public Restauracja(int pozycja, String nazwa){
        this.pozycja = pozycja;
        this.nazwa = nazwa;
    }

        //METODY
        public void addPizza(){             //Dodaje pizze do menu , do tablicy od zerowej
            Scanner sc = new Scanner(System.in);
            System.out.println("Ile chcesz dodac pozycji");
            ile = sc.nextInt();

            int[] pozycja = new int[ile];
            int[] cena = new int[ile];
            String[] nazwa = new String[ile];
            String[] skladniki = new String[ile];

            for(int i=0; i<ile; i++){
            pozycja[i]++;
            System.out.println("Prosze podac nazwe pizzy: ");
            nazwa[i] = sc.nextLine();
            System.out.println("Prosze podac skladniki pizzy po przecinku: ");
            skladniki[i] = sc.nextLine();
            System.out.println("Prosze podac cene: ");
            cena[i]= sc.nextInt();
            System.out.println("Dodano do menu. ");
            menu[i] = new Restauracja(pozycja[i], nazwa[i], skladniki[i], cena[i]);
            }
            sc.close();

        }
        public void showMenu(){
        //  String pokaz[] = new String[5];
            for(int i = 0; i < 5 ; i++){
            System.out.println(menu[i].pozycja + ". " + menu[i].nazwa + ", cena " + menu[i].cena + " zl.\nSkladniki: " +  menu[i].skladniki + "\n");
            }
        }

}

PS. w showMenu dalem przykladowa liczbe 5 na ten moment. wiem, ze mozna to zmienic.

edytowany 1x, ostatnio: bogdans, 2016-01-27 10:28
ps2. dopiero teraz czytam o super() ;p - suprise 2016-01-27 03:25
" Czy da się to zrobić bez wywoływania obiektu ?" Z tego co mi się wydaje to metoda musi byc statyczna - Koffing 2016-01-27 07:44

Pozostało 580 znaków

2016-01-27 10:42
0
  1. Wstawiaj kod w znaczniki <code class="java"></code>
  2. Klasa Restauracja jest raczej bez sensu, ona powinna zawierać pola: nazwa i Pizza[] menu. Klasę Pizza powinieneś dopisać.W tej klasie powinien być konstruktor o sygnaturze Restauracja(String nazwa).
  3. Jak użytkownik ma wyjść z programu?
  4. Nigdy nie zamykaj Scannera czytającego z klawiatury.
    Przykładowy kod klasy Silnik.

    import java.util.Scanner;
    public class Silnik
    {
    public static void main(String[] args) 
    {
        int wybor;
        Scanner sc = new Scanner(System.in);
        boolean done = false;
        Restauracja restauracja = new Restauracja();
    
        while(!done)
        {
            System.out.println("\tProgram: Zarządzanie Restauracją \' WENECJA \' ");
            System.out.println("Wybierz liczbe: ");
            System.out.println("1. Stworz menu(cennik).");
            System.out.println("2. Wyswietl menu(cennik).");
            System.out.println("3. Koniec programu.");
            wybor = sc.nextInt();
            System.out.print("Twoj wybor to : " + wybor + "\n");
            switch(wybor)
            {
                case 1: 
                {
                    restauracja.addPizza();
                    break;
                }
    
                case 2: 
                {
                    restauracja.showMenu();
                    break;
                }
                case 3:
                {
                    done = true;
                    break;
                }
    
                default: 
                {
                    System.out.println("Podales zly numer. Prosze podac jeszcze raz");
                }
    
            }
        } 
    }
    }

To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
edytowany 3x, ostatnio: bogdans, 2016-01-27 13:40

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0