# Frage zu "Hotelbuchung"(Schulaufgabe)



## flicks62 (29. Nov 2015)

Hey ich habe eine Schulaufgabe, ich habe die ganzen Aufgaben hinbekommen aber bei der letzten schwankt es etwas.

Hier der Letzte Auftrag:  http://i.epvpimg.com/akTYd.jpg

Meine Frage ist.. wenn ich if & else nutze, passiert z.B. beim ersten if dies:

if... nettoBetrag+20

else... nettoBetrag

danach kommen aber noch weitere if else if etc. wie z.B.

if ... nettoBetrag -2%

else if nettoBetrag -4%

etc. meine Frage wäre jetzt wenn er oben den nettoBetrag mit der 20 addiert aber dann am ende nochmal von der "gesamtsumme" 2% abzieht, wie schaffe ich es das er die ganzen "rechnungen" davor mit einberechnet weil wenn ich jetzt z.B. nettoBetrag -2% mache dann wird es NUR vom nettoBetrag abgezogen aber nicht von den ganzen Rechnungen davor usw..

Hier mein Quellcode

```
import java.util.Scanner;
public class Arbeitsauftrag02 {
  public static void main (String [] args) {
  
    System.out.println("Das Hotel Dersim bietet ihnen den Zimmer Preis im wert von 100 Euro an, ");
    System.out.println("für Kinder zwischen 0-7 Jahren ist es Kostenfrei, für Kinder zwischen 7-11 gelten 70% Rabatt & sontiges 30% Rabatt.");
    System.out.println("Es werden jetzt einige fragen an sie gestellt damit unser Programm den Gesamtpreis für sie ausrechnen kann.");
  
    Scanner b = new Scanner(System.in);
    System.out.print("Anzahl der Personen: ");
    int z2 = b.nextInt();
  
    Scanner s = new Scanner(System.in);
    System.out.print("Wie lange möchten sie Übernachten: ");
    int z1 = s.nextInt();
  
    Scanner d = new Scanner(System.in);
    System.out.print("Alter ihres Kindes( 0 für Kein Kind ): ");
    int z3 = d.nextInt();
  
    Scanner f = new Scanner (System.in);
    System.out.println("Wenn sie ein Reisebüro sind bestätigen sie mit der 1, ");
    System.out.println("Wenn sie ein Firmenkunde sind bestätigen sie mit der 2, ");
    System.out.print("Wenn sie ein Stammkunde sind bestätigen sie mit der 3: ");
    int z4 = f.nextInt();
  
    double zimmerPreis;
    zimmerPreis=100;
    double kinderPreis = 50;
    
    double nettoBetrag = zimmerPreis*z1*z2;
  
    if (z1==1) {
      System.out.println("Die Aufenthaltsdauer beträgt: "+z1+ " Tage");
      System.out.println("Der Zimmerpreis beträgt: "+zimmerPreis+" Euro");
      System.out.println("Die Anzahl der Personen sind: "+z2+" Personen");
      System.out.println("Nettobetrag + Aufschlag ist: "+(nettoBetrag+20)+" Euro");
    } // end of if
  
    else {
      System.out.println("Die Aufenthaltsdauer beträgt: "+z1+" Tage");
      System.out.println("Der Zimmerpreis beträgt: "+zimmerPreis+" Euro");
      System.out.println("Die Anzahl der Personen sind: "+z2+" Personen");
      System.out.println("Der Nettobetrag ist: " +nettoBetrag+" Euro");
    } // end of if-else
  
    if(z3<=6) {
      System.out.println("Sie kriegen 100% Rabatt auf ihr Kind.");
      System.out.println("Das wären dann " +kinderPreis * 0/100+ " Euro für ihr Kind");
      System.out.println("Der Gesamtpreis + Kind würden dann "+(nettoBetrag+kinderPreis* 0/100)+" Euro kosten");
    } // end of if-else
  
    else if (z3<=11) {
      System.out.println("Sie kriegen 70% Rabatt auf ihr Kind.");
      System.out.println("Das wären dann "+kinderPreis * 30/100+ " Euro für ihr Kind");
      System.out.println("Der Gesamtpreis + Kind würden dann "+(nettoBetrag+kinderPreis* 30/100)+" Euro kosten");
    } // end of if
  
    else if (z3>11) {
      System.out.println("Sie kriegen 30% Rabatt auf ihr Kind.");
      System.out.println("Das wären dann"+kinderPreis * 70/100+ " Euro für ihr Kind");
      System.out.println("Der Gesamtpreis + Kind würden dann "+(nettoBetrag+kinderPreis* 70/100)+" Euro kosten");
    } // end of if-else
  
  
    if (z4==1) {
      System.out.println("Sie kriegen 6% Rabatt da sie ein Reisebüro Kunde sind.");
      System.out.println("Euer endbetrag würde dann " nettoBetrag);
    } // end of if
  
    else if(z4==2) {
      System.out.println("4% Firmenkunde");
    } // end of if-else
  
    else if (z4==3) {
      System.out.println("2% Stammkunde");
    } // end of if-else
    else if(z4==0) {
      System.out.println("Sie kriegen keinen Kundenrabatt.");
    } // end of if-else
  }
}
```


----------



## strußi (29. Nov 2015)

hast du eine Klasse Kunde, in dem du den Typ des Kunden hinterlegst?
dann kannst du einfach sagen, if( kunde.getTyp() ==firmenkunde) rabatt =4;}


----------



## flicks62 (29. Nov 2015)

ich habe es so gemacht das die "Kunden" in der Console eingeben welcher typ sie sind reisebüro,stammkunde etc.. wenn sie z.B. 1 eingeben passiert if (z4==1)... & so weiter außerdem versteh ich nicht ganz was du meinst, ich verstehe das nicht


----------



## flicks62 (29. Nov 2015)

Hab es jetzt so gemacht:



Spoiler



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

    //String Text des Hotels
    System.out.println("Das Hotel Dersim bietet ihnen den Zimmer Preis im wert von 100 Euro an, ");
    System.out.println("für Kinder zwischen 0-7 Jahren ist es Kostenfrei, für Kinder zwischen 7-11 gelten 70% Rabatt & sontiges 30% Rabatt.");
    System.out.println("Es werden jetzt einige fragen an sie gestellt damit unser Programm den Gesamtpreis für sie ausrechnen kann.");

    //Scanner nutzen & dazu die Variabeln Deklarieren + Ausgabe
    Scanner b = new Scanner(System.in);
    System.out.print("Anzahl der Personen: ");
    int z2 = b.nextInt();

    Scanner s = new Scanner(System.in);
    System.out.print("Wie lange möchten sie Übernachten: ");
    int z1 = s.nextInt();

    Scanner d = new Scanner(System.in);
    System.out.print("Alter ihres Kindes( 0 für Kein Kind ): ");
    int z3 = d.nextInt();

    Scanner f = new Scanner (System.in);
    System.out.println("Wenn sie ein Reisebüro sind bestätigen sie mit der 1, ");
    System.out.println("Wenn sie ein Firmenkunde sind bestätigen sie mit der 2, ");
    System.out.print("Wenn sie ein Stammkunde sind bestätigen sie mit der 3 ");
    System.out.println("Wenn sie ein Normaler Kunde sind bestätigen sie mit der 0: ");
    int z4 = f.nextInt();

    double zimmerPreis;
    zimmerPreis=100;
    double kinderPreis = 50;
    int aufschlag = 20;

    double nettoBetrag = zimmerPreis*z1*z2;

    double end1 = nettoBetrag+aufschlag;
    double end2 = nettoBetrag;

    //If & else bedinungen + Ausgabe + berechnung

    if (z1==1) {
      System.out.println("Die Aufenthaltsdauer beträgt: "+z1+ " Tage");
      System.out.println("Der Zimmerpreis beträgt: "+zimmerPreis+" Euro");
      System.out.println("Die Anzahl der Personen sind: "+z2+" Personen");
      System.out.println("Nettobetrag + Aufschlag ist: "+(end1)+" Euro");
    } // end of if


    else {
      System.out.println("Die Aufenthaltsdauer beträgt: "+z1+" Tage");
      System.out.println("Der Zimmerpreis beträgt: "+zimmerPreis+" Euro");
      System.out.println("Die Anzahl der Personen sind: "+z2+" Personen");
      System.out.println("Der Nettobetrag ist: " +end2+" Euro");
    } // end of if-else



    if(z3<=6 && z1==1) {
      System.out.println("Sie kriegen 100% Rabatt auf ihr Kind.");
      System.out.println("Das wären dann " +kinderPreis * 0/100+ " Euro für ihr Kind");
      System.out.println("Der Gesamtpreis + Kind würden dann "+(end1+kinderPreis* 0)+" Euro kosten");
    } // end of if-else

    else if(z3<=6 && z1>1) {
      System.out.println("Sie kriegen 100% Rabatt auf ihr Kind.");
      System.out.println("Das wären dann " +kinderPreis * 0/100+ " Euro für ihr Kind");
      System.out.println("Der Gesamtpreis + Kind würden dann "+(end2+kinderPreis* 0)+" Euro kosten");
    } // end of if-else

    else if (z3<=11 && z1==1) {
      System.out.println("Sie kriegen 70% Rabatt auf ihr Kind.");
      System.out.println("Das wären dann "+kinderPreis * 30/100+ " Euro für ihr Kind");
      System.out.println("Der Gesamtpreis + Kind würden dann "+(end1+kinderPreis* 0.3)+" Euro kosten");
    } // end of if

    else if (z3<=11 && z1>1) {
      System.out.println("Sie kriegen 70% Rabatt auf ihr Kind.");
      System.out.println("Das wären dann "+kinderPreis * 30/100+ " Euro für ihr Kind");
      System.out.println("Der Gesamtpreis + Kind würden dann "+(end2+kinderPreis* 0.3)+" Euro kosten");
    } // end of if

    else if (z3>11 && z1==1) {
      System.out.println("Sie kriegen 30% Rabatt auf ihr Kind.");
      System.out.println("Das wären dann"+kinderPreis * 70/100+ " Euro für ihr Kind");
      System.out.println("Der Gesamtpreis + Kind würden dann "+(end1+kinderPreis* 0.7)+" Euro kosten");
    } // end of if-else

    else if (z3>11 && z1>1) {
      System.out.println("Sie kriegen 30% Rabatt auf ihr Kind.");
      System.out.println("Das wären dann"+kinderPreis * 70/100+ " Euro für ihr Kind");
      System.out.println("Der Gesamtpreis + Kind würden dann "+(end2+kinderPreis* 0.7)+" Euro kosten");
    } // end of if-else


    if (z4==1 && z1==1) {
      System.out.println("Sie kriegen 6% Rabatt da sie ein Reisebürokunde sind.");
      System.out.println("Euer Endbetrag würde dann "+(end1* 0.06)+" Euro sein");
    } // end of if

    if (z4==1 && z1>1) {
      System.out.println("Sie kriegen 6% Rabatt da sie ein Reisebüro Kunde sind.");
      System.out.println("Euer Endbetrag würde dann "+(end2* 0.06)+" Euro sein");
    } // end of if

    else if(z4==2 && z1==1) {
      System.out.println("Sie kriegen 4% Rabatt da sie ein Firmenkunde sind.");
      System.out.println("Euer Endbetrag würde dann "+(end1* 0.04)+" Euro sein");
    } // end of if-else

    else if(z4==2 && z1>1) {
      System.out.println("Sie kriegen 4% Rabatt da sie ein Firmenkunde sind.");
      System.out.println("Euer Endbetrag würde dann "+(end2* 0.04)+" Euro sein");
    } // end of if-else

    else if (z4==3 && z1==1) {
      System.out.println("Sie kriegen 2% Rabatt da sie ein Stammkunde sind.");
      System.out.println("Euer Endbetrag würde dann "+(end1* 0.02)+" Euro sein");
    } // end of if-else

    else if (z4==3 && z1>1) {
      System.out.println("Sie kriegen 2% Rabatt da sie ein Stammkunde sind.");
      System.out.println("Euer Endbetrag würde dann "+(end2* 0.02)+" Euro sein");
    } // end of if-else

    else if(z4==0) {
      System.out.println("Sie kriegen keinen Kundenrabatt.");
    } // end of if-else






  }
}


----------



## JBelarbi (29. Nov 2015)

Hi, also wenn du zu viel *if *Bedingungen brauchst, dann wird ich  dir empfehlen mit *switch case* zu arbeiten.
Schau mal hier  : https://docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html


----------



## VirtualIndex (29. Nov 2015)

Das Problem an switch case ist, dass es nur genaue feste Werte verarbeiten kann. Etwas wie ungleich, größer, größer gleich, usw. geht nicht.


----------



## strußi (30. Nov 2015)

mir ist beim nochmalingen durchlesen aufgefallen, dass du für jede Frage ein neues Scanner-Object machst, nutze das alte und gibt einen schoenen namen wie inputReader oder so.

außerdem rechnest du sofort nach dem einlesen der Personen und der Übernachtungen aus, was das zimmer kosten soll. 
die Fragen sollten so lauten
aE =Anzahl Erwachsene
aK =Anzahl Kinder //dann fällt die Sache mit Kind =0Jahre weg, weil wenn ein Saeugling, der frisch geboren ist, mitkommt hat der ein Alter von 0 ;-)
aUe =Anzahl Übernachtungen

du fragst als erstes ab ob er ein Zuschlag zahlen muss oder nicht, und diese Abfrage schleppst du die ganze Zeit mit, weil du zwei Variabeln end1 und end2 hast, daher mein Vorschlag den Nettozimmerpreis in eine Variable zimmerpreis schieben.
zuschlag =0;
if( aUE <=1){
  zuschlag =20
}
dann errechnet sich der vorläufige Zimmerpreis ueber: zimmerpreisE*aE*aUE +zimmerpreisK*aK*aUE +zuschlag;
oder zwei ZimmerpreisVariabeln eine fuer ZimmerpreisE und eine fuer den ZimmerpreisK
die erste Verzweigte abfrage, ob das Kind unter 7 ist wuerde auch wegfallen, da du nur noch eine Preisvariable hast.

was ist, wenn ich z.B. 4 kinder haetter 1. 0J, 2. 8J, 3. 11J, 4. 18J dann ist der rabatt 50*1+50*0.7+50*0.7+50*0.3

2% Rabatt sind nicht zP*0.02 das waeren nur 2% und dein Hotel waere ganz schnell pleite. Der Faktor ist 0.98
ist der Rabatt vom, im, am Hundert zu rechnen?????
das gilt, so wie ich es gesehen habe, fuer alle deine Rechnungen. 


ueberleg dir bitte, wie du den code vereinfachen kannst, und ob du manche Ausgaben/Eingaben vlt. in Methoden auslagern kannst.
und formatiere bitte deinen code (einruecken)


----------



## strußi (6. Dez 2015)

Wie weit bist du jetzt gekommen?


----------



## Jardcore (11. Dez 2015)

Wie strußi bereits erwähnte könntest du einige Methoden erstellen und damit Codeduplizieren vermeiden.

Grundsätzlich kannst du dir merken:
-Don't repeat yourself (Heißt im Idealfall hast du keine Codezeile die doppelt vorkommt)
-Und Methoden sollten immer nur eine Sache machen


----------

