Wie addiere bzw. subtrahiere ich beliebig viele übergebene Programmparameter in Java?
Hi habe hier folgende Aufgabe: "Schreiben Sie ein Programm, dass beliebig viele Zahlen als Programmparameter übergeben bekommen kann. Zusätzlich wird als letztes Zeichen ein „+“ oder „-“ übergeben. Lesen Sie alle Parameter ein und führen Sie eine Addition bzw. eine Subtraktion auf alle übergebenen Zahlen aus. Bei einer Subtraktion soll von der ersten Zahl subtrahiert werden. Sie können davon ausgehen, dass immer mindestens zwei Zahlen übergeben werden und dass nur die Operatoren + und - übergeben werden." Beispiel: java Parameteruebergabe 1 2 3 + -> 6 (= 1 + 2 + 3) java Parameteruebergabe 10 2 3 – -> 5 (= 10 - 2 - 3) Kann mir da irgendjemand weiterhelfen? Bekomme es irgendwie nicht hin. Danke
4 Antworten
Die Parameter bekommst du über das String[] args in der main Methode.
Hier habe ich eben etwas programmiert:
public static void main (String[] args) throws java.lang.Exception {
if(args.length < 3){
throw new Exception("Mindestens drei Parameter: 2 Zahlen und das Zeichen");
}
int[] numbers = new int[args.length];
numbers[numbers.length - 1] = args[args.length - 1].charAt(0) == '+' ? 1 : -1;
for(int i = 0; i < numbers.length - 1; ++i){
numbers[i] = Integer.parseInt(args[i]);
}
System.out.println(sum(numbers));
}
public static int sum(int... numbers){
int operator = numbers[numbers.length - 1];
int base = numbers[0];
for(int i = 1; i < numbers.length - 1; ++i){
base += operator * numbers[i];
}
return base;
}
-snip zu spät dafür, sry :D-
Außerdem steht da, man kann davon ausgehen, dass immer min. 2 Zahlen übergeben werden (also Exception unnötig, da nie gethrowed wird).
Nutze das args-Array der Main-Methode. Von diesem wertest du das letzte Element via switch-case aus, um die Rechenart zu ermitteln. Für die Rechnung iterierst du über die vorherigen Elemente (0 bis Länge-1), wandelst jedes in eine Zahl um und nutzt es für die Rechnung.
Probiere das ganze mit einem switch-Befehl:
switch(operator) { case "-": return 1-2-2; case "+": return 1+2+3; }
public int doMath(char operator, int... numbers) {
int result = 0;
if(operator == '-') {
result = numbers[0];
for(int i = 1; i < numbers.length; i++) {
result -= numbers[i];
}
} else {
for(int i = 0; i < numbers.length; i++) {
result += numbers[i];
}
}
return result;
}
0 bis Länge-2
(um 00:14 Uhr ist so ein Patzer verzeihlich)