Java Gewinn berechnen

hallo

habe schon ein nächstes beispiel begonnen, mit dem ich auch wieder fast fertig bin. ich möchte einen betrag einlesen (funktioniert), dann habe ich fixe steuersätze für die bereichsgrenzen von beträgen.

zwischen 0 und 3640 € --> 0 % steuer
zwischen 3641 und 7270 € --> 21 % steuer
zwischen 7271 und 21800 € --> 31 % steuer
zwischen 21801 und 50870 € --> 41 % steuer
über 50870 € --> 50 % steuer

das ganze möchte ich wieder über arrays machen, die steuersätze sind konstant und daher auch kein problem, aber jetzt komme ich zum problem. wie sage ich dass es in einem array 5 bereichsgrenzen gibt oder muss ich das auf 5 arrays aufteilen? wenn ich es aufteilen muss, wie sage ich ihm dann, dass bei array 2 die werte 3641 bis 7270 hineinkommen sollen (wie gibt man „von-bis“ grenzen bei arrays an?) ja und zum schluss soll er den gewinn ausrechnen, indem er mit einer if-schleife schaut, in welche kategorie der eingegebene betrag gehört und je nachdem die steuer abzieht. bitte um hilfe:

import java.util.Scanner;
public class Steuersaetze {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner s = new Scanner(System.in);

int betrag;
double gewinn = 0;
double steuersatz[] = new double[5];
double steuer[] = new double[3640-0+1];
int i = 0;
int j = 0;
int k = 0;
int l = 0;
int m = 0;

System.out.println(„Bitte geben Sie den Betrag ein.“);
betrag = s.nextInt();

steuersatz[0]=0;
steuersatz[1]=0.21;
steuersatz[2]=0.31;
steuersatz[3]=0.41;
steuersatz[4]=0.5;

for (i = 0; i

Hallo Manuel,

ich glaube, du musst dir erst einmal darüber klar werden, welches Teilproblem du eigentlich lösen willst, vermutlich nämlich das hier (in deinen eigenen Worten):

[…] in welche kategorie der eingegebene betrag gehört

zwischen 0 und 3640 € --> 0 % steuer
zwischen 3641 und 7270 € --> 21 % steuer
zwischen 7271 und 21800 € --> 31 % steuer
zwischen 21801 und 50870 € --> 41 % steuer
über 50870 € --> 50 % steuer

Also würde ich dir empfehlen, eine Funktion zu schreiben, die genau das tut (und nur das; um die Berechnung des Gewinns kannst du dich später kümmern). Wenn man deine natürlichsprachliche Beschreibung direkt in Java übersetzt, sieht das ziemlich ähnlich aus:

private static double taxRate(int amount) {
 if (amount \>= 0 && amount = 3641 && amount 50870) {
 return 0.50;
 }
}

Das würde schon einmal funktionieren und du könntest taxRate(…) in deinen Berechnungen verwenden. So weit so gut, vielleicht genügt dir das schon, aber wenn sich deine Steuern oder die Bereichsgrenzen ändern, wäre es gut, wenn du etwas flexibler wärest.

Zunächst könnte man die „doppelten“ Bereichsgrenzen entfernen (und da das letzte Intervall nur nach unten begrenzt ist, würde man vielleicht mit dem Testen von oben anfangen):

private static double taxRate(int amount) {
 if (amount \>= 50871) {
 return 0.50;
// ...
 } else if (amount \>= 3641) {
 return 0.21;
 } else {
 return 0.00;
 }
}

Deine Abbildung von Beträgen auf Steuersätze ist nun also nur noch durch eine Liste von Intervall(unter)grenzen und Werten beschrieben: (50871, 0.50), (21801, 0.41), (7271, 0.31), (3641, 0.21).

Diese Liste könntest du nun auch tatsächlich als beliebig lange Liste speichern. Da du wohl noch keine anderen Datenstrukturen kennst, nimmst du am besten zwei Arrays:

private static final int[] LOWER\_BOUNDS = new int[] { 50871, 21801, 7271, 3641 };
private static final double[] RATES = new double[] { 0.50, 0.41, 0.31, 0.21 };

Jetzt musst du deine Funktion nur noch verallgemeinern, damit sie auf diesen Arrays arbeitet, z.B. so (in Pseudocode, damit du etwas zum Üben hast):

private static double taxRate(int amount) {
 /\* 
 Prüfe nacheinander alle unteren Grenzen (beachte die Sortierung):
 Wenn der Betrag über dieser Grenze liegt, gib den zugehörigen
 Steuersatz zurück.
 (Falls keine der Grenzen zutrifft, gib einen Standardwert 
 (0 %) zurück.)
 \*/
}

Viel Erfolg,

Andreas

vielen herzlichen dank, das funktioniert perfekt mit den 2 arrays, ich kopiere den code nochmal rein, damit du schauen kannst, wie ich das gemacht habe:

import java.util.Scanner;
public class Steuersaetze {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner s = new Scanner(System.in);

int betrag;
double gewinn = 0;
double untergrenze[] = new double[] { 50871, 21801, 7271, 3641 };
double steuersatz[] = new double[] { 0.50, 0.41, 0.31, 0.21 };

System.out.println(„Bitte geben Sie den Betrag ein.“);
betrag = s.nextInt();

if (betrag >= untergrenze[0]) {
gewinn = betrag - (betrag*steuersatz[0]);
} else if (betrag >= untergrenze[1]) {
gewinn = betrag - (betrag*steuersatz[1]);
} else if (betrag >= untergrenze[2]) {
gewinn = betrag - (betrag*steuersatz[2]);
} else if (betrag >= untergrenze[3]) {
gewinn = betrag - (betrag*steuersatz[3]);
} else {
gewinn = betrag;
}

System.out.println("Der Gewinn beträgt: " + gewinn);

}

}

Hi,

freut mich; dann zeige ich dir auch noch kurz, wie ich mir das gedacht hatte, indem ich deinen Code umschreibe (so lässt sich die Liste der Steuersätze leichter erweitern):

import java.util.Scanner;

public class Steuersaetze {

 private static final double untergrenze[] = new double[] { 50871, 21801, 7271, 3641 };
 private static final double steuersatz[] = new double[] { 0.50, 0.41, 0.31, 0.21 };

 private static double passenderSteuersatz(int betrag) {
 for (int i = 0; i = untergrenze[i]) {
 return steuersatz[i];
 }
 }
 return 0.0;
 }

 public static void main(String[] args) {
 Scanner s = new Scanner(System.in);

 System.out.println("Bitte geben Sie den Betrag ein.");
 int betrag = s.nextInt();

 double steuer = betrag \* passenderSteuersatz(betrag);
 double gewinn = betrag - steuer;

 System.out.println("Der Gewinn beträgt: " + gewinn);
 }
}

Gruß,
Andreas

PS: Benutze in Zukunft bitte pre-Tags um deinen Code, damit er besser lesbar ist.