# Rabatt-Berechnungsprogramm



## 4edcjüöä_kopfroller (24. Sep 2015)

Hallo,

ich bereite mich gerade auf eine Klausur vor und mache dazu folgende Übungsklausur-Aufgabe:






Mein Struktugramm zu dieser Aufgabe sieht wie folgt aus:





Wäre dies so in Ordnung? Zur Übung habe ich dieses Struktugramm dann umgesetzt und bin ziemlich ins Zweifeln gekommen, da mir meine Lösung nicht sehr elegant erscheint...

```
package rabatt.programm;
import Prog1Tools.IOTools;

public class RabattProgramm
{

    public static void main(String[] args)
    {
        double  nettoPreis;
        boolean ende = true;
      
        do
        {
            nettoPreis = IOTools.readDouble("Geben Sie den Netto-Verkaufswert ein: ");
          
            if (nettoPreis < 1000)
            {
                double reduzNettoPreisBar = nettoPreis*((double)1-((double)3/(double)100));
                double reduzNettoPreis14Tage = nettoPreis*((double)1-((double)2/(double)100));
                double reduzNettoPreisIn4Wochen = nettoPreis*((double)1-((double)1/(double)100));
              
                double mwst = nettoPreis*((double)0.19);
                double mwstBar = reduzNettoPreisBar*((double)0.19);
                double mwst14Tage = reduzNettoPreis14Tage*((double)0.19);
                double mwstIn4Wochen = reduzNettoPreisIn4Wochen*((double)0.19);
              
                double bruttoPreis = nettoPreis + mwst;
                double bruttoPreisBar = reduzNettoPreisBar + mwst;
                double bruttoPreis14Tage = reduzNettoPreis14Tage + mwst;
                double bruttoPreisIn4Wochen = reduzNettoPreisIn4Wochen + mwst;
              
                System.out.println("Netto-Verkaufswert: " + nettoPreis + "€");
                System.out.println();
                System.out.println("\t\t\t\t"+"Reduzierter Verkaufswert" + "\t\t" + "MwSt." + "\t\t" + "Brutto-Verkaufswert");
                System.out.println("Barzahlung \t\t\t\t" + reduzNettoPreisBar + "\t\t\t\t" + mwstBar +"\t\t\t" + bruttoPreisBar);
                System.out.println("Zahlung in 14 Tagen \t\t\t" + reduzNettoPreis14Tage + "\t\t\t\t" + mwst14Tage + "\t\t\t" + bruttoPreis14Tage);
                System.out.println("Zahlung in 4 Wochen \t\t\t" + reduzNettoPreisIn4Wochen + "\t\t\t\t" + mwstIn4Wochen + "\t\t\t" + bruttoPreisIn4Wochen);
                System.out.println("Zahlung nach 4 Wochen \t\t\t" + nettoPreis + "\t\t\t\t" + mwst + "\t\t\t" + bruttoPreis);
            }
            else
            {
                double reduzNettoPreisBar = nettoPreis*((double)1-((double)5/(double)100));
                double reduzNettoPreis14Tage = nettoPreis*((double)1-((double)3/(double)100));
                double reduzNettoPreisIn4Wochen = nettoPreis*((double)1-((double)0/(double)100));
              
                double mwst = nettoPreis*((double)0.19);
                double mwstBar = reduzNettoPreisBar*((double)0.19);
                double mwst14Tage = reduzNettoPreis14Tage*((double)0.19);
                double mwstIn4Wochen = reduzNettoPreisIn4Wochen*((double)0.19);
              
                double bruttoPreis = nettoPreis + mwst;
                double bruttoPreisBar = reduzNettoPreisBar + mwst;
                double bruttoPreis14Tage = reduzNettoPreis14Tage + mwst;
                double bruttoPreisIn4Wochen = reduzNettoPreisIn4Wochen + mwst;
              
                System.out.println("Netto-Verkaufswert: " + nettoPreis + "€");
                System.out.println();
                System.out.println("\t\t\t\t"+"Reduzierter Verkaufswert" + "\t\t" + "MwSt." + "\t\t" + "Brutto-Verkaufswert");
                System.out.println("Barzahlung \t\t\t\t" + reduzNettoPreisBar + "\t\t\t\t" + mwstBar +"\t\t\t" + bruttoPreisBar);
                System.out.println("Zahlung in 14 Tagen \t\t\t" + reduzNettoPreis14Tage + "\t\t\t\t" + mwst14Tage + "\t\t\t" + bruttoPreis14Tage);
                System.out.println("Zahlung in 4 Wochen \t\t\t" + reduzNettoPreisIn4Wochen + "\t\t\t\t" + mwstIn4Wochen + "\t\t\t" + bruttoPreisIn4Wochen);
                System.out.println("Zahlung nach 4 Wochen \t\t\t" + nettoPreis + "\t\t\t\t" + mwst + "\t\t\t" + bruttoPreis);
            }
        } while (ende == true);
    }
  
}
```

Vielen Dank schon mal.


----------



## MWin123 (24. Sep 2015)

Statt prozedural solltest du objektorientiert programmieren.

Du hast viel doppelten Code. Den kannst du in eine Methode auslagern und die dann aufrufen.
Die ganzen `(double)` casts sind größtenteils überflüssig.


----------



## strußi (24. Sep 2015)

da du immer auf die gleiche Weise Werte berechnest, kannst du die berechnung auch in eine Methode auslagern und die Werte für die Berechnung als Parameter mitgeben, die dann aufrufst.


für die Ausgabe kannst du die http://openbook.rheinwerk-verlag.de...tml#dodtp502391df-4eac-4eb6-a246-312c07a323f4http://openbook.rheinwerk-verlag.de...tml#dodtp502391df-4eac-4eb6-a246-312c07a323f4 wählen, das gibt ein schöneres Bild

Dir fehlt auch noch die Möglichkeite einen weiteren Wert einzugeben.


----------



## 4edcjüöä_kopfroller (25. Sep 2015)

Hey,
danke für eure schnellen Antworten. Brauche ich denn wirklich 3x4 verschiedene Variablen oder lässt sich das mit einem mehrdimensionalen Array viel einfacher lösen?


----------



## strußi (25. Sep 2015)

du kannst es auch so versuchen

```
int rabatt[ ] [ ]  = { { 3, 2, 1, 0}, { 5, 3, 2, 0}};
```
das Ergebnis kann auch in einem solchen Array liegen.


----------



## 4edcjüöä_kopfroller (26. Sep 2015)

Im Moment sieht das Ganze bei mir so aus:

```
package rabattprogramm_v2;
import Prog1Tools.IOTools;

public class RabattProgramm_v2
{
    public static void main(String[] args)
    {
        int[][] rabatt = new int[4][2];
        rabatt[0] = new int[] {3,5};
        rabatt[1] = new int[] {2,3};
        rabatt[2] = new int[] {1,2};
        rabatt[3] = new int[] {0,0};
 
        double[][] preise = new double[4][3];
 
        boolean abbruch = true;
 
        do
        {
            double nettoPreis = IOTools.readDouble("Bitte geben Sie den Netto-Verkaufspreis ein: ");
     
            int rabattSpalte;
     
            if (nettoPreis < 1000)
            {
                rabattSpalte = 0;
            }
            else
            {
                rabattSpalte = 1;
            }
     
            for (int zeile = 0; zeile < 4; zeile++)
            {
                preise[zeile][0] = nettoPreis*(1-rabatt[zeile][rabattSpalte]/100);
                preise[zeile][1] = preise[zeile][0]*0.19;
                preise[zeile][2] = preise[zeile][0]+preise[zeile][1];
            }
     
 
            System.out.println("Netto-Verkaufswert: " + nettoPreis + "€");
            System.out.println();
            System.out.println("\t\t\t\t"+"Reduzierter Verkaufswert" + "\t\t" + "MwSt." + "\t\t" + "Brutto-Verkaufswert");
     
            System.out.println("Barzahlung: \t\t\t\t" + preise[0][0] + "\t\t\t\t" + preise [0][1] + "\t\t\t" + preise [0][2] + "\t\t");
            System.out.println("Zahlung in 14 Tagen: \t\t\t" + preise[1][0] + "\t\t\t\t" + preise[1][1] + "\t\t\t" + preise[1][2] + "\t\t");
            System.out.println("Zahlung in 4 Wochen: \t\t\t" + preise[2][0] + "\t\t\t\t" + preise[2][1] + "\t\t\t" + preise[2][2] + "\t\t");
            System.out.println("Zahlung nach 4 Wochen: \t\t\t" + preise[3][0] + "\t\t\t\t" + preise[3][1] + "\t\t\t" + preise[3][2] + "\t\t");
        }while (abbruch != false);
    }
}
```
Allerdings funktioniert die Ausgabe bzw. Berechnung noch nicht richtig und ich erhalte in der Tabelle immer die selben Werte. Liegt es an der Art und Weise wie ich die Array-Werte versuche auszugeben? Edit: Das Problem liegt wohl an der Zeile 
	
	
	
	





```
preise[zeile][0] = nettoPreis*(1-(rabatt[zeile][rabattSpalte]/100));
```

Edit2: Fehler gefunden
Nachdem ich das Array int[][] rabatt in double[][] rabatt geändert habe, funktioniert nun alles. Das Problem war wohl, dass in der ersten Berechnungszeile "preise[zeile][0]" der int-Wert vom rabatt-Array nicht mit den doublen-Werten von preise harmoniert hat. Sehe ich das so richtig?


----------

