Co robie tutaj zle?

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);
						}
					}
			}


}
 
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.

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 ;)

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: 
0

Scanner daj po wypisywaniu menu wyboru

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();

0

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

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.

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();

		}
	}
}


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.

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");
                }

            }
        } 
    }
}
0
 
public class Restauracja {
                    //ZMIENNE
int ile;                         // ile dodac pozycji, zmienna ktora pomaga w petli wczytywana przez uzytkownika

Jeżeli zmienna pomaga w pętli, to powinna być to zmienna lokalna.

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

Ale dlaczego klasa Restauracja zawiera menu, w którym każda z pozycji to restauracja? Z tego wynika, że każda pozycja menu, może zawierać więcej pozycji menu, z których każda może zawierać więcej pozycji, z których każda... . Próbuję sobie to wyobrazić w świecie rzeczywistym i jakoś nie potrafię :P

0
Sarrus napisał(a):

Z tego wynika, że każda pozycja menu, może zawierać więcej pozycji menu, z których każda może zawierać więcej pozycji, z których każda...

user image

0
 import java.util.Scanner;

	public class Pizza{
		
		int pozycja;					//pozycja pizzy
		String nazwa;					//nazwa pizzy
		String skladniki;				//skladniki pizzy
		int cena;						//cena pizzy
		Scanner sc = new Scanner(System.in);			//nowy obiekt typu scanner do podawania danych przez uzytkownika aplikacji
		
		
							// KONSTRUKTORY
		public Pizza(int pozycja,String nazwa, String skladniki, int cena){
			this.pozycja = pozycja;
			this.nazwa = nazwa;
			this.skladniki = skladniki;
			this.cena = cena;

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

		}
		public Pizza(int pozycja, String nazwa, int cena){
			this.pozycja = pozycja;
			this.nazwa = nazwa;
			this.cena = cena;
		}
		public Pizza(int pozycja, String nazwa){
			this.pozycja = pozycja;
			this.nazwa = nazwa;
		}
		public Pizza(){
			this.pozycja = 0;
			this.nazwa = "";
			this.skladniki = "";
			this.cena = 0;
		}
		
		
		
		public void addPizza(){				//Dodaje pizze do menu , do tablicy od zerowej
							
			pozycja++;
			System.out.println("Prosze podac nazwe pizzy: ");
			nazwa = sc.nextLine();
			System.out.println("Prosze podac skladniki pizzy po przecinku: ");
			skladniki = sc.nextLine();
			System.out.println("Prosze podac cene: ");
			cena= sc.nextInt();
			System.out.println("Dodano do menu. ");
			new Pizza(pozycja, nazwa, skladniki, cena);
			
		}
		
		public void showPizza(){
			System.out.println(pozycja + ". " + nazwa + ", cena " + cena + " zl.\nSkladniki: " +skladniki + "\n");
			}
		}
import java.util.Scanner;

public class Restauracja{
	Scanner sc = new Scanner(System.in);	
	Pizza poz[] = new Pizza[20];
	int ile;
	
	public int howManyAdd(){				//ile dodac pozycji
		return ile = sc.nextInt();
	}	
	
	public void addMenu(){
	System.out.println("Ile chcesz dodac pozycji: ");
	howManyAdd();
	for (int i=0; i<ile; i++)	
	poz[i].addPizza();
	}
	
	public void showMenu(){
		System.out.println("Ile chcesz wyswietlic pozycji(Proponuje tyle samo co dodales): ");
		howManyAdd();
		for(int i=0; i<ile; i++){
		poz[i].showPizza();
		}	
	}
	
	
	
}
 
 import java.util.Scanner;

	public class Pizza{
		
		int pozycja;					//pozycja pizzy
		String nazwa;					//nazwa pizzy
		String skladniki;				//skladniki pizzy
		int cena;						//cena pizzy
		Scanner sc = new Scanner(System.in);			//nowy obiekt typu scanner do podawania danych przez uzytkownika aplikacji
		
		
							// KONSTRUKTORY
		public Pizza(int pozycja,String nazwa, String skladniki, int cena){
			this.pozycja = pozycja;
			this.nazwa = nazwa;
			this.skladniki = skladniki;
			this.cena = cena;

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

		}
		public Pizza(int pozycja, String nazwa, int cena){
			this.pozycja = pozycja;
			this.nazwa = nazwa;
			this.cena = cena;
		}
		public Pizza(int pozycja, String nazwa){
			this.pozycja = pozycja;
			this.nazwa = nazwa;
		}
		public Pizza(){
			this.pozycja = 0;
			this.nazwa = "";
			this.skladniki = "";
			this.cena = 0;
		}
		
		
		
		public void addPizza(){				//Dodaje pizze do menu , do tablicy od zerowej
							
			pozycja++;
			System.out.println("Prosze podac nazwe pizzy: ");
			nazwa = sc.nextLine();
			System.out.println("Prosze podac skladniki pizzy po przecinku: ");
			skladniki = sc.nextLine();
			System.out.println("Prosze podac cene: ");
			cena= sc.nextInt();
			System.out.println("Dodano do menu. ");
			new Pizza(pozycja, nazwa, skladniki, cena);
			
		}
		
		public void showPizza(){
			System.out.println(pozycja + ". " + nazwa + ", cena " + cena + " zl.\nSkladniki: " +skladniki + "\n");
			}
		}

Witam.
Po pierwsze - dziękuje za wszystkie odpowiedzi. Powoli się zagłębiam w programowanie i fajnie jest mieć możliwość przeczytania waszych porad oraz możliwość dyskusji. (prócz na uczelni).
Po drugie - nie wiem czy do końca wszystko dobrze zrozumiałem. Powyższy kod właśnie przerabiam, ale mam błąd przy kompilacji.
Pytania:

  1. Zastanawiam się czy jest sens tworzenia metody howManyAdd()?
  2. O co chodzi przy błędzie kompilacji.
  3. Czy sposób, którym to robię jest dobry? Czuje się trochę zrażony, bo zakręciłem się tworząc obiekty klas (przynajmniej tak mi się wydaje) i teraz coś mi się sypie. Jest ktoś w stanie przerobić wyżej program lub podpowiedzieć mi w dość prosty sposób?
    Pozdrawiam.
0

IMHO metoda addPizza to powinna być chyba raczej w klasie Restauracja, a nie Pizza.

0
  1. Możesz zdradzić gdzie jest błąd kompilacji?
  2. Dopisywanie pizzy nie powinno być metodą kasy Pizza. Mnogość konstruktorów jest zbyteczna. Starczy taka klasa
class Pizza
{
     String nazwa = "";
     String skladniki = "";
     int cena = 0;
     Pizza(String nazwa, String skladniki, int cena)
    {
        this.nazwa = nazwa;
        this.skladniki = skladniki;
        this.cena = cena;          
    }
 }
  1. Klasa Restauracja powinna mieć konstruktor nadający jej nazwę. Jeżeli użytkownik wybierze dwukrotnie z menu opcję Stwórz menu, to drugi wybór ma dopisać nowe pizze, czy wpierw ma wymazać te dopisane poprzednio? Słyszałeś o kolekcjach? Jeśli tak, to zamień w klasie Restauracja zmienną
Pizza poz[] = new Pizza[20];

na

ArrayList<Pizza> poz = new ArrayList<Pizza>();
0

Tak, słyszałem o kolekcjach i listach, lecz nie doszedłem do tego momentu w kursie i wolałbym zrobić to na zwykłych tablicach.
Chciałbym, żeby utworzyło się menu, czyli po drugim wykonaniu stworz menu pozycje dodawały się do poprzednich.
Uzyskałem mniej więcej coś takiego. Dalej wyskakuje mi blad jak skomiluje i w konsoli klikam 1.stworz menu i wybieram ile pozycji. Coraz bardziej to mi sie rozjaśnia, ale dalej nic. Co teraz Panowie ?

import java.util.Scanner;

public class Restauracja{

	public Restauracja(){

	}
	Scanner sc = new Scanner(System.in);
	Pizza poz[] = new Pizza[20];
	int ile;

	public int howManyAdd(){				
		return ile = sc.nextInt();
	}

	public void addMenu(){
	System.out.println("Ile chcesz dodac pozycji: ");
	howManyAdd();
	for (int i=0; i<ile; i++){
		poz[i].pozycja = poz[i].pozycja + 1;
		System.out.println("Prosze podac nazwe pizzy: ");
		poz[i].nazwa = sc.nextLine();
		System.out.println("Prosze podac skladniki pizzy po przecinku: ");
		poz[i].skladniki = sc.nextLine();
		System.out.println("Prosze podac cene: ");
		poz[i].cena= sc.nextInt();
		System.out.println("Dodano do menu. ");
		poz[i]=new Pizza(poz[i].pozycja, poz[i].nazwa, poz[i].skladniki, poz[i].cena);
		}
	}

	public void showMenu(){
		System.out.println("Ile chcesz wyswietlic pozycji(Proponuje tyle samo co dodales): ");
		howManyAdd();
		for(int i=0; i<ile; i++){
			System.out.println(poz[i].pozycja + ". " + poz[i].nazwa + ", cena " + poz[i].cena + " zl.\nSkladniki: " + poz[i].skladniki + "\n");
		}
	}



}
 
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.addMenu();
                    break;
                }
 
                case 2: 
                {
                    restauracja.showMenu();
                    break;
                }
                case 3:
                {
                	done = true;
                    System.out.println("Program zostanie wylaczony. ");
                    break;
                }
 
                default: 
                {
                    System.out.println("Podales zly numer. Prosze podac jeszcze raz");
                }
 
            }
        } 
    }
}
class Pizza
{
	int pozycja = 0;
     String nazwa = "";
     String skladniki = "";
     int cena = 0;
     Pizza(int pozycja, String nazwa, String skladniki, int cena)
    {
    	this.pozycja=pozycja;
        this.nazwa = nazwa;
        this.skladniki = skladniki;
        this.cena = cena;
    }
 }



 
0

Pole pozycja w klasie Pizza jest zupełnie niepotrzebne. Pozycja wynika z indeksu pizzy w tablicy (kolekcji).
Kod z kolekcją jest zdecydowanie prostszy do napisania. Przy tablicy musisz:

  • pilnować by nie przekroczyć zakresu (20 pozycji),
  • pamiętać ile pozycji w tablicy poz jest już wypełnione, żeby wiedzieć gdzie wpisać kolejne..
    Jak się upierasz to korzystaj z tablicy. Ja nie jestem masochistą.
    Zamień ten kod
    for (int i=0; i<ile; i++){
        poz[i].pozycja = poz[i].pozycja + 1;
        System.out.println("Prosze podac nazwe pizzy: ");
        poz[i].nazwa = sc.nextLine();
        System.out.println("Prosze podac skladniki pizzy po przecinku: ");
        poz[i].skladniki = sc.nextLine();
        System.out.println("Prosze podac cene: ");
        poz[i].cena= sc.nextInt();
        System.out.println("Dodano do menu. ");
        poz[i]=new Pizza(poz[i].pozycja, poz[i].nazwa, poz[i].skladniki, poz[i].cena);
        }
    }

na

String nazwa = "";
String skladniki = "";
int cena = 0;
    for (int i=0; i<ile; i++){
        System.out.println("Prosze podac nazwe pizzy: ");
        nazwa = sc.nextLine();
        System.out.println("Prosze podac skladniki pizzy rozdzielone przecinkami: ");
        skladniki = sc.nextLine();
        System.out.println("Prosze podac cene (liczba całkowita): ");
        cena= sc.nextInt();
        sc.nextLine();//wyczyszczenie bufora klawiatury  
        System.out.println("Dodano do menu. ");
        poz.add(new Pizza(nazwa,skladniki, cena));
        }
    }

Wyda też uprzedzić użytkownika, że nie może podać ceny 12,50.
P.S. Zdanie "Prosze podac skladniki pizzy po przecinku:" oznacza, że należy wpisać coś takiego ,sos pomidorowy cebula ser mozarella.

0

Jeszcze jedno pytanie, pewnie bardzo proste, ale od dłuższego czasu mnie to zastanawia.
Jak to jest, że podczas tworzenia menu pierwsza iteracja pętli for wykonuje się, jak na poniższym przykładzie?
Natomiast każda następna iteracja działa poprawnie, nie zjada nazwy pierwszej Pizzy?

Pozdrawiam oraz przepraszam za pytanie level -32, ale czasami, żeby mieć ogólny zarys wiedzy, wole wiedzieć jak temu zapobiec.

	Program: Zarządzanie Restauracją ' WENECJA ' 
Wybierz liczbe: 
1. Stworz menu(cennik).
2. Wyswietl menu(cennik).
3. Koniec programu.
1
Twoj wybor to : 1
Ile chcesz dodac pozycji: 
3
Prosze podac nazwe pizzy: 
Prosze podac skladniki pizzy rozdzielone przecinkami: 
ser, szynka
Prosze podac cene (liczba całkowita): 
15
Dodano do menu. 
Prosze podac nazwe pizzy: 
Szynkowa
Prosze podac skladniki pizzy rozdzielone przecinkami: 
ser, szynka, pieczarki
Prosze podac cene (liczba całkowita): 
10
Dodano do menu. 
Prosze podac nazwe pizzy:  

BTW. jakiś specjalny znacznik dla konsoli? <console> TEST </console>

Edytuje post , bo mam jeszcze kilka pytań.

  1. Jak zoptymalizować dany kod?
  2. Jak wdrożyć listy w taki sposób, żeby opcja wyświetlMenu robiła ją do momentu zapełnionych pozycji w tej liscie(utworzonych obiektów pizza).
    Pytania troche rozległe, sam też poczytam, więc może zdążę odpowiedzieć sobie przed wami :P
0

NextInt jak sama nazwa wskazuje czyta z bufora wartość całkowitą. Z kolei nextLine czyta całą linię. Gdy wprowadzasz ile pizz chcesz wprowadzić to program czyta wyłącznie liczbę nie czyta za to entera którym potwierdzasz ile pizz chcesz wprowadzić. Ten enter sobie zostaje w buforze i czyta go dopiero nextLine który masz w addPizza i to powoduje, że przy pierwszym uruchomieniu pomija czytanie nazwy pierwszej pizzy. Rozwiązanie to zamiana nextInt na nextLine i konwersja przeczytanej wartości na liczbę całkowitą.

1

Prostsze rozwiązanie - polegające na czyszczeniu bufora po wczytaniu - liczby podałem w ostatnim kodzie.

cena= sc.nextInt();
sc.nextLine();//wyczyszczenie bufora klawiatury

Rozwiązania @Haskell'a i moje nie są równoważne, inaczej reagują na pewne błędy. Mój sposób zaakceptuje odpowiedź 3 23, a sposób @Haskell'a jej nie zaakceptuje.
Dodaj w klasie Restauracja pole ilePozycji, w którym będziesz pamiętał ile pizz jest już w menu. Jeśli ilePozycji >= 20, to wyświetlaj okrojone menu (bez pozycji "Stwórz menu").

0
import java.util.Scanner;

public class Restauracja{

//	public Restauracja(){
	//				}
	Scanner sc = new Scanner(System.in);
	Pizza poz[] = new Pizza[20];
	int ile_zamowien;	//ile zlozyles zamowien
	int ile_pozycji;	//ile dodales pozycji
	int raport;		//raport dobowy
	int zamowienie;
	Zamow zamow[] = new Zamow[100];		//100 zamowien max



	public int addMenu(){			//metoda stworz menu
	System.out.println("Ile chcesz dodac pozycji: ");
	ile_pozycji = sc.nextInt();
	String nazwa = "";
	String skladniki = "";
	int cena = 0;
	    for (int i=0; i<ile_pozycji; i++){
	    	sc.nextLine();	//czyszczenie bufora
	        System.out.println("Prosze podac nazwe pizzy: ");
	        nazwa = sc.nextLine();
	        System.out.println("Prosze podac skladniki pizzy rozdzielone przecinkami: ");
	        skladniki = sc.nextLine();
	        System.out.println("Prosze podac cene (liczba całkowita): ");
	        cena= sc.nextInt();
	        sc.nextLine();		//wyczyszczenie bufora klawiatury
	        System.out.println("Dodano do menu. Kliknij Enter. ");
	        poz[i]= (new Pizza(nazwa, skladniki, cena));
	        }
	    return ile_pozycji;
	}


	public void showMenu(){		//metoda pokazujaca stworzone menu
		if(ile_pozycji==0)		// jesli menu puste
		{
			System.out.println("Menu jest puste, musisz je najpierw stworzyc.");
		} else{
			for(int i=0; i<ile_pozycji; i++){
				System.out.println((i+1) +". "+ poz[i].nazwa + ", cena " + poz[i].cena + " zl.\nSkladniki: " + poz[i].skladniki + "\n");
				}
		}
	}

	public int newOrder(){				// nowe zamowienie

		showMenu();						//pokaz menu
		System.out.println("Prosze podac numer pizzy, ktora chcesz zamowic.");
		zamowienie = sc.nextInt();		//wczytaj liczbe od uzytkownika

		while(zamowienie!=0){			//jesli ktos nie wpisze 0 wykonuj zamowienia
		System.out.println("Zamowiles: " + poz[zamowienie-1].nazwa + ", za: "+ poz[zamowienie-1].cena + " zl.");
		raport = raport + poz[zamowienie-1].cena;		//raport dobowy
		ile_zamowien= ile_zamowien++;					// ile_zamowien pomagajacy w wyswietlaniu ich
		zamow[zamowienie-1] = new Zamow(poz[zamowienie-1].nazwa , poz[zamowienie-1].cena); 	//wpisanie zamowien
		System.out.println("Jesli chcesz zamowic cos jeszcze wybierz numer zamowienia.");
		System.out.println("W przeciwnym wypadku kliknij 0. ");
		zamowienie = sc.nextInt();
		}
	return raport;
	}

	public void showOrder(){	//pokaz zamowienie
		if(ile_zamowien == 0){	//petla jesli puste
		System.out.println("Nic nie zamowiles.");
		}else{
				for(int i=0; i<ile_zamowien; i++){			//petla wypisujaca zamowienia
					System.out.println("Zamowiles: " + zamow[i].nazwa + ", za :" + zamow[i].cena);
				}
			 }
	}

	public int dailyReport(){		//ustawia aktualny raport dobowy
		return raport;
	}

	public int restart(){					// restart raportu dobowego do zera
		return raport = ile_zamowien = 0;	// restart ilosci zamowien do zera
	}

}
 
 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. Zloz zamowienie.");
            System.out.println("4. Wyswietl zamowienie(a).");
            System.out.println("5. Wyswietl raport dobowy.");
            System.out.println("6. Wyzeruj raport dobowy oraz zamowienia.");
            System.out.println("7. Wyjscie z programu. ");
            wybor = sc.nextInt();
            System.out.print("Twoj wybor to : " + wybor + "\n");
            switch(wybor)
            {
                case 1:
                {
                    restauracja.addMenu();
                    break;
                }

                case 2:
                {
                    restauracja.showMenu();
                    break;
                }

                case 3:
                {
                	restauracja.newOrder();
                	break;
                }
                case 4:
                {
                	 restauracja.showOrder();
                	 break;
                }
                case 5:
                {
                	System.out.println("Raport dobowy wynosi = " + restauracja.dailyReport() + " zl");
                	break;
                }
                case 6:
                {
                	restauracja.restart();
                	System.out.println("Wyzerowano raport dobowy oraz zamowienia.");
                	break;
                }
                case 7:
                {
                	done = true;
                    System.out.println("Program zostanie wylaczony. ");
                    break;
                }
                default:
                {
                    System.out.println("Podales zly numer. Prosze podac jeszcze raz");
                }

            }
        }
    }
}
class Pizza
{
	 String nazwa = "";
     String skladniki = "";
     int cena = 0;

     Pizza(String nazwa, String skladniki, int cena) {
    	this.nazwa = nazwa;
        this.skladniki = skladniki;
        this.cena = cena;
    }

} 
public class Zamow {
String nazwa;
int cena;

Zamow(String nazwa, int cena) {
	this.nazwa = nazwa;
    this.cena = cena;
}
}
 

EDIT:
Juz na wiekszosc pytan znalazlem odpowiedzi. zamieszczam kod na miejscu starego kodu. W dalszym ciagu jestem otwarty na ulepszenia ewentualnie lepsza przejrzystość.

Teraz nurtuje mnie pytanie, czy da sie zwrocic z funkcji neworder zmienną raport (zeby potem przy showDailyRaport nie bylo 0) oraz w tej samej funkcji ile_zamowien, zebym mogl wykonac petle ktora wyswietla zamowienia?

0

Napisałeś

Chciałbym, żeby utworzyło się menu, czyli po drugim wykonaniu stworz menu pozycje dodawały się do poprzednich.

Ale Twoja metoda addMenu tak nie działa. Zmieniłeś zdanie, czy źle napisałeś metodę?
Metoda dopisująca do menu powinna wyglądać tak:

    public void addMenu()
    {            //metoda stworz menu
         System.out.println("Ile chcesz dodac pozycji: ");
         int ile = sc.nextInt();
         sc.nextLine();
         ile = Math.min(ile,poz.length - ile_pozycji); //ograniczenie by nie wyjść poza tablicę
         String nazwa = "";
         String skladniki = "";
         int cena = 0;
         for (int i=0; i<ile; i++)
         {
             System.out.println("Prosze podac nazwe pizzy: ");
             nazwa = sc.nextLine();
             System.out.println("Prosze podac skladniki pizzy rozdzielone przecinkami: ");
             skladniki = sc.nextLine();
             System.out.println("Prosze podac cene (liczba całkowita): ");
             cena= sc.nextInt();
             sc.nextLine();        //wyczyszczenie bufora klawiatury
             System.out.println("Dodano do menu. Kliknij Enter. "); //moim zdaniem, ten i następny wiersz są zbędne
             sc.nextLine();
             poz[ile_pozycji + i]= (new Pizza(nazwa, skladniki, cena));
         }
        ile_pozycji+=ile;
    }
0
 import java.util.Scanner;
public class Restauracja{

//	public Restauracja(){
	//				}
	Scanner sc = new Scanner(System.in);
	Pizza poz[] = new Pizza[20];
	int ile_zamowien;	//ile zlozyles zamowien
	int ile_pozycji;	//ile dodales pozycji
	int raport;		//raport dobowy
	int zamowienie;
	int ile;
	int x;
	int lacznie;
	Zamow zamow[] = new Zamow[100];		//100 zamowien max



	public void addMenu(){			//metoda stworz menu
	System.out.println("Ile chcesz dodac pozycji: (od 1 do 20).");
	ile = sc.nextInt();
	sc.nextLine();
	ile = Math.min(ile, poz.length - ile_pozycji); //ograniczenie by nie wyjść poza tablicę
	String nazwa = "";
	String skladniki = "";
	int cena = 0;
	    for (int i=0; i<ile; i++){
	    	System.out.println("Prosze podac nazwe pizzy: ");
	        nazwa = sc.nextLine();
	        System.out.println("Prosze podac skladniki pizzy rozdzielone przecinkami: ");
	        skladniki = sc.nextLine();
	        System.out.println("Prosze podac cene (liczba całkowita): ");
	        cena= sc.nextInt();
	        sc.nextLine();		//wyczyszczenie bufora klawiatury
	   //     System.out.println("Dodano do menu. Kliknij Enter. ");
	        poz[i]= (new Pizza(nazwa, skladniki, cena));
	        }
	     ile_pozycji+=ile;
	}


	public void showMenu(){		//metoda pokazujaca stworzone menu
		if(ile_pozycji==0)		// jesli menu puste
		{
			System.out.println("Menu jest puste, musisz je najpierw stworzyc.");
		} else{
			for(int i=0; i<ile_pozycji; i++){
				System.out.println((i+1) +". "+ poz[i].nazwa + ", cena " + poz[i].cena + " zl.\nSkladniki: " + poz[i].skladniki + "\n");
				}
		}
	}

	public void newOrder(){				// nowe zamowienie

		showMenu();						//pokaz menu
		System.out.println("Prosze podac numer pizzy, ktora chcesz zamowic.");
		zamowienie = sc.nextInt();		//wczytaj liczbe od uzytkownika

		while(zamowienie!=0){			//jesli ktos nie wpisze 0 wykonuj zamowienia
		System.out.println("Zamowiles: " + poz[zamowienie-1].nazwa + ", za: "+ poz[zamowienie-1].cena + " zl.");
		raport = raport + poz[zamowienie-1].cena;		//raport dobowy
		x = x + 1;						// ilosc zamowien pomagajacy w wyswietlaniu zamowienia
		zamow[zamowienie-1] = new Zamow(poz[zamowienie-1].nazwa , poz[zamowienie-1].cena); 	//wpisanie zamowien
		System.out.println("Jesli chcesz zamowic cos jeszcze wybierz numer zamowienia.");
		System.out.println("W przeciwnym wypadku kliknij 0. ");
		zamowienie = sc.nextInt();
		}
		lacznie = lacznie +x;


	}

	public void showOrder(){	//pokaz zamowienie
		if(lacznie == 0){	//petla jesli puste
		System.out.println("Nic nie zamowiles.");
		}else{
				for(int i=0; i<lacznie; i++){			//petla wypisujaca zamowienia
					System.out.println("Zamowiles: " + zamow[i].nazwa + ", za : " + zamow[i].cena + " zl");
					}
			 }
	}

	public int dailyReport(){		//ustawia aktualny raport dobowy
		return raport;
	}

	public int restart(){					// restart raportu dobowego do zera
		return raport = x = 0;	// restart ilosci zamowien do zera
	}

}

Dosc duzy problem. Po dodaniu przykladowo 2ch pizz, gdy uzywam ponownie funkcji dodaj do menu nie moge dodac ponownie pizzy(wyskakuje blad).
Podobnie z wyswietlaniem zamowienia, jesli raz wyswietle, wszystko jest okej, lecz jesli zrobie to drugi raz wyskakuje błąd. Kombinuje na wszystkie sposoby, jakies pomysly ?

0
  1. Podałem Ci kod metody addMenu, a Ty go zmieniłeś. Miałeś jakieś ważne powody?
  2. Ten wiersz
System.out.println("Ile chcesz dodac pozycji: (od 1 do 20).");

wprowadza w błąd, powinno być "(od 1 do "+(20-ile_pozycji)+".)".

0

Przy dodawaniu do menu nie ma żadnych problemów.
Natomiast kod dopisujący zamówienia jest raczej absurdalny.

    public void newOrder(){                // nowe zamowienie
 
        showMenu();                        //pokaz menu
        System.out.println("Prosze podac numer pizzy, ktora chcesz zamowic.");
        zamowienie = sc.nextInt();        //wczytaj liczbe od uzytkownika
 
        while(zamowienie!=0){            //jesli ktos nie wpisze 0 wykonuj zamowienia
        System.out.println("Zamowiles: " + poz[zamowienie-1].nazwa + ", za: "+ poz[zamowienie-1].cena + " zl.");
        raport = raport + poz[zamowienie-1].cena;        //raport dobowy
        zamow[lacznie] = new Zamow(poz[zamowienie-1].nazwa , poz[zamowienie-1].cena);     //wpisanie zamowien
        lacznie++;
        System.out.println("Jesli chcesz zamowic cos jeszcze wybierz numer zamowienia.");
        System.out.println("W przeciwnym wypadku kliknij 0. ");
        zamowienie = sc.nextInt();
        }
    }
    public int restart()
    {
        return raport = lacznie = 0;
    }
0

Dzieki wszystkim za odpowiedzi, bardzo mi pomogliscie.
Chcialem to zrobic tak struktualnie, zeby zrozumiec pewne zasady i ich działania.
Natomiast teraz chciałbym, żeby program był bardziej obiektowy.
Znalazlem funkcje Decorator() , lecz mam problem ją wprowadzić,
ponadto chcialbym dodac rownież listy.
Czy ktos ma pomysl jak przerobic powyzszy program?
Najlepiej kod lub pomysł :)
Pozdrawiam.

0

Witam, Proszę o szybką odpowiedź.

  1. Jak zrobić, aby po dodaniu zamowienia, nie wyskakiwal blad ? Chodzi mi o metode nowe zamowienia.
  2. Banalnie proste pytanie, ale gubie się ponownie. Jak zrobic, zeby np. w metodzie DodajPozycje, jak wybiore zly numer, to po ponownym wyborze dobrego numeru zadziałała funkcja?
  3. Ogolnie nie wiem czy extends dobrze jest, gubie się troche.
    Wiem, że dużo błędów, ale już je eliminuje powoli. Proszę o szybką odpowiedź, bo deadline bliżej niż myślicie.
    Pozdrawiam
package wenecja;

import java.util.Scanner;
public class Silnik
{
    public static void main(String[] args)
    {
    	Menu menu = new Menu();
    	Zamowienia zamow = new Zamowienia();
    	Scanner sc = new Scanner(System.in);
    	menu.wyswietlMenu();
    	
    	
    

    int answer;
        
        boolean done = false;
      

        while(!done)
        {
            System.out.println("\tProgram: Zarządzanie Restauracją \' WENECJA \' ");
            System.out.println("Wybierz liczbe: ");
            System.out.println("1. Dodaj do menu.");
            System.out.println("2. Wyswietl menu.");
            System.out.println("3. Zloz zamowienie.");
//            System.out.println("4. Wyswietl zamowienie(a).");
//            System.out.println("5. Wyswietl raport dobowy.");
//            System.out.println("6. Wyzeruj raport dobowy oraz zamowienia.");
            System.out.println("7. Wyjscie z programu. ");
            answer = sc.nextInt();
            System.out.print("Twoj wybor to : " + answer + "\n");
            switch(answer)
            {
                case 1:
                {	
    				 menu.dodajPozycjeDoMenu();
    				break;
    					
                }
//
                case 2:
                {
                    menu.wyswietlMenu();
                    break;
                }

                case 3:
                {	
                	menu.wyswietlMenu();
                	zamow.noweZamowienia();
                 break;
                }
                case 4:
                {
                	 zamow.wyswietlZamowienia();
                	 break;
                }
//                case 5:
//                {
//               
//                	break;
//                }
//                case 6:
//                {
//            
//                	break;
//                }
                case 7:
                {
                	done = true;
                    System.out.println("Program zostanie wylaczony. ");
                    break;
                }
                default:
                {
                    System.out.println("Podales zly numer. Prosze podac jeszcze raz");
                }

            }
        }
    
    }
    
}     
package wenecja;

import java.util.List;
import java.util.Scanner;
import java.util.ArrayList;


public class Zamowienia extends Menu{
Scanner sc = new Scanner(System.in);
List zamowienia = new ArrayList();

	public void noweZamowienia(){

		System.out.println("Prosze podac numer pizzy, ktora chcesz zamowic. Jesli chcesz skonczyc zamowienie wpisz 0.");
		int i = sc.nextInt();
		
		while(i !=0){
			zamowienia.add(karta.get(i-1));			
			
			System.out.println("Zamowiono!");
		}
	}

	public void wyswietlZamowienia(){
		for(int i=0; i<zamowienia.size(); i++)
		{
			zamowienia.get(i);
		}

		

	}


}
 
package wenecja;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.Iterator;
public class Pizza
{
	Scanner sc = new Scanner(System.in);						// scanner
 	List<String> listaSkladnikow = new ArrayList<String>();		// lista skladnikow

 	 String nazwa;			//nazwa pizzy
	 int cena;				//cena pizzy

     public Pizza(String nazwa, int cena) {		//konstruktor
    	this.nazwa = nazwa;
        this.cena = cena;
     }
     public Pizza() {}							//konstruktor


	public void dodajSkladniki(){				//metoda dodaj skladniki

		System.out.println("Ile skladnikow chcesz dodac: ");
		int wybor = sc.nextInt();
		System.out.println("Wpisz skladniki rozdzielając enterem.");
		for(int i=0; i<=wybor; i++){
			listaSkladnikow.add(sc.nextLine());
		}

	}


}

 
package wenecja;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Menu {
	
	Scanner sc = new Scanner(System.in);			//scanner
	List<Pizza> karta = new ArrayList<Pizza>();		//lista menu
	
	public void dodajPozycjeDoMenu(){				
		System.out.println("Czy chcesz dodac nową pozycje ? 1-jesli tak, 9-jesli nie");
		int wybor =  sc.nextInt();
		if(wybor == 1){
			Pizza pizza = new Pizza();
			sc.nextLine();
			System.out.println("Podaj nazwe nowej pizzy: ");
			pizza.nazwa = sc.nextLine();
			System.out.println("Podaj cene nowej pizzy: ");
			pizza.cena = sc.nextInt();
			pizza.dodajSkladniki();
			karta.add(pizza);
			

		}else if( wybor == 9){
		System.out.println("Wracamy do menu glownego.");
		}
		else{
			System.out.println("Wybrales zla litere. Prosze podac jeszcze raz: ");
			wybor = sc.nextInt();
			
		}
	}

	public void wyswietlMenu(){
		for(int i=0; i<karta.size(); i++){
			System.out.println( (i+1) + ". " + karta.get(i).nazwa + ", cena: " + karta.get(i).cena + " zl, Sklad: " + karta.get(i).listaSkladnikow );
		
	}

  }

}	
	 

P.S: Jeśli chce wam się, to możecie wypisywać błędy, choć głównie chodzi mi o te pytania. Dobrze wiem o tym, że mogę wyrzucać błędy, że jak ktos wpisze litere tam gdzie trzeba liczbę to wyswietli mi się coś tam, ale nie potrzebuję tego tutaj na ten moment.

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