Java Verarbeitung von 3 Eingaben

Confus3d

Newbie
Registriert
Nov. 2014
Beiträge
1
Moin Leute,
ich habe gerade Lösungsschwierigkeiten bei einer Aufgabe die ich vor mir habe.
Kurze Beschreibung der Aufgabe: Ich soll in der Aufgabe ein kleines Programm für einen Blumentopfhändler schreiben. Dabei soll der Blumentopfhändler dann frei nach belieben die Anzahl der Bestellungen, Bruttopreis pro Bestellung und ob es eine Express- oder Normalbestellung ist. Später in der Aufgabe sollen dann Werte wie Gesamtanzahl der bestellten Blumentöpfe, preis incl. Mehrwertsteuer etc ausgegeben werden.

Meine Java-Fähigkeiten sind dabei noch sehr beschränkt auf Dinge wie einfache Arrays, Schleifen etc.

Hier mal mein Status (ja ein kleiner Zusatz war das der Blumentopfhändler Wurstfinger hat und ich das ausgleichen soll)
Code:
package blumentopfhändler;
import java.util.InputMismatchException;
import java.util.Scanner;

public class Blumentopfhändlert {
  
  public static void main (String[]args) {
    
    Scanner sc = new Scanner (System.in);
    boolean weiter= true;
    
				System.out.println("Wie viele Bestellungen sollen erfolgen?");
				int bestellungen = 0;
				do{
					try{
						bestellungen = sc.nextInt();
						weiter = false;
					 } catch (InputMismatchException e) {
						 System.out.print("Sorry, das war keine gueltige Anzahl! ");
				          System.out.print("Bitte Anzahl der Bestellungen angeben! ");
				          sc.next();
					 }
				} while (weiter);
			    weiter = true;
    
	double blumentoepfe[] = new double[bestellungen];
    
    for (int i = 0; i < bestellungen; i++) {
		System.out.println("Bitte gebe die Anzahl der Blumentoepfe der "+(i+1)+ "-ten Bestellung ein");
		do{
			try{	
		flaschen[i] = sc.nextDouble();
		weiter = false;
    }catch (InputMismatchException e) {
				 System.out.print("Sorry, das war keine gueltige Anzahl! ");
		          System.out.print("Bitte Anzahl der Blumentoepfe angeben! ");
		          sc.next();
			 }
		} while (weiter);
	    weiter = true;
    }
	
    
    double betrag[] = new double [bestellungen];
    
    for (int i = 0; i < bestellungen; i++) {
    	System.out.println("Bitte gebe den Preis der "+(i+1)+ "-ten Bestellung ein");
    	do{
    		try{
    	betrag[i] = sc.nextDouble();
    	weiter = false;
    }catch (InputMismatchException e) {
				 System.out.print("Sorry, das war keine gueltige Anzahl! ");
		          System.out.print("Bitte den Preis der Bestellung angeben! ");
		          sc.next();
			 }
		} while (weiter);
	    weiter = true;
    }
    
   
    
    for (int i = 0; i< bestellungen; i++) {
		System.out.println("Bestellung[" + i +"]= "+blumentoepfe[i]+" blumentoepfe und "+betrag[i]);
	}   
 
  
  
  }
}

So nun sieht man das ich immer ein neues Array erschaffen habe für die unterschiedlichen Eingaben. Nun stehe ich aber vor der Frage wie ich für jede Bestellung noch notieren kann ob es eine Expresslieferung ist oder nicht. Ich würde mich sehr über Tipps freuen. Vll fehlt mir gerade auch nur eine Anregung.
Vielen Dank im Voraus.
 
Zuletzt bearbeitet:
Hi, da es ja eine Übung ist gebe ich dir mal nur einen Denkanstoß (*hust* bin selbst noch Anfänger *hust hust*)

Ich würde das per Objekt realisieren.
Ein Objekt "Bestellung", dass deine Eingaben entgegen nimmt.

quasi:


Code:
Eingabe: Anzahl bestellungen

Bestellung[] bestellung = new Bestellung[bestellungen],
for (int i=0, i<bestellungen,i++){

Eingabe anzahlBlumen;
Eingabe preis;
Eingabe express; 


bestellung[i] = new Bestellung(AnzhalBlumen, Preis, True/false) // True o. False bezieht sich hier auf die Express Lieferung.

}

In dem Objekt Bestellung:

Code:
public class Bestellung {

public Bestellung(int AnzahlBlumen, double Preis, boolean Express){

   }
}

kannst du dann auch die Methoden schreiben um die Eingaben zu prüfen, dann ist Main etwas aufgeräumter.
Den Gesamtpreis kannst du dann auch per schleife mit "bestellungen" ermitteln.
(Im Prinzip hast du dann deine ganzen Arrays durch ein Objekt Array ausgetauscht).


Wenn dir das zu viel ist mach doch ein boolean Array (true/false) und mach eine Abfrage:

Code:
Ausgabe: Ist es eine Expresslieferung? (Y/N)
Eingabe: Y/N

if(Eingabe.equals('Y'){
 booleanArray[index] = true;
}
else{
bolleanArray[index] = false;
}

(Sorry, dass das Zeug nicht formatiert ist. Habe mein eclipse grade nicht am mann.)
 
Ein nettere Anfaengerloesung waere ein Array zu bauen, das wiederum jeweils kleinere Arrays enthaelt. Du speicherst also an jeder Position ein kleines Array der Laenge 3 oder wieviel Attribute du auch immer brauchst. In so ein 3-elementiges Array kannst du dann die Attribute einer Blumentopfbestellung speichern: Groesse des Topfs, Expresslieferung ja/nein, Preis, Menge der Topfart etc. etc.

Dazu laesst du in deiner Eingabeschleife, die du ja schon hast Auswahloptionen anzeigen: 1. Bestellung aufgeben, 2. Fertig.
Dann holst du dir den Input von deinem Scanner und checkst, ob das ne 1, 2 oder sonst was war.
Bei 2 verlaesst du die Schleife, bei 1 faengst du dann an nach weiteren Inputs zu fragen, deinen Attributen: Anzahl der Toepfe, Groesse, Preis, Expresslieferung ja/nein. Das greifst du ab und schreibst das in ein kleines Array, das du an einer Position in deinem grossen Array speicherst.

Schoen waere es, wenn du diese Abfrage fuer eine neue Bestellung in eine extra Methode auslagerst, das machts leserlicher und logisch gekapselter.

Dein cooles Array kannst du so bauen:

int[][] bestellungen = new int[anzahl moeglicher bestellungen][anzahl moeglicher attribute]


Ansprechen kannst du die einzelnen indizes dann mit einer verschachtelten For-Schleife:

for(int i = 0; i < anzahl moeglicher bestellungen; i++)
{
for(int j = 0; j < anzahl moeglicher attribute; j++)
{
//doSomething();
}
}

Unschoen daran ist nun, dass du im Vorfeld wissen musst, wie viele Bestellungen es geben wird, damit du dein Array entsprechend initialisiert bekommst. Das Problem kannst du umschiffen, indem du eine ArrayList benutzt. Das ist quasi ein aufgepimptes Array, gut benutzbar und es vergroessert sich dynamisch. Du kannst also einfach immer Elemente einfuegen, ohne dir Sorgen machen zu muessen.

Eine Arraylist, die wiederum Arrays der Laenge = Anzahl Bestellattribute enthaelt, baust du so:

ArrayList<int[]> bestellungen = new ArrayList<int[3]>();


Fuellst du eine neue Bestellung mit Usereingaben aus, erzeugst du dir temporaer ein int[] der Laenge 3, befuellst es mit Attributen, und fuegst es dann deiner ArrayList hinzu:

int[] temp = new int[3];
temp[0] = sc.nextInt(); //Anzahl der Toepfe
temp[1] = sc.nextInt(); //Groesse
temp[3] = sc.nextInt(); //Express ja/nein (hier nur 0 und 1 zulassen, ansonsten nen Fehler ausgeben oder defaultmaessig 0 eintragen, je nach Geschmack)

bestellungen.add(temp);


Und fertig ist. Nicht vergessen java.util.ArrayList zu importieren, oder so.

Das waere jetzt eine sehr naive Anfaengerloesung. Normalerweise wuerde man das mit Objekten und Memberfunktionen machen. Aber das kommt bald in deiner Vorlesung / Klasse / Kurs.
 
Zurück
Oben