public void calculateNumbers(char mathSymbol,int[] numbers)
{
// ...
}
public void calculateNumbers(char mathSymbol,int... numbers)
{
// ...
}
public class MyClass {
public static void main(String args[]) {
calculateNumbers('+',1,2,3,4);
}
public static void calculateNumbers(char mathSymbol,int... numbers)
{
for (int number : numbers)
{
System.out.println(number);
}
}
}
Das entspricht aber nicht der Aufgabe! Da steht "beliebig viele Zahlen" usw.. Ein Array sind aber nicht beliebig viele Zahlen, sondern nur Integer.MAX_VALUE viele Zahlen. Wobei vermutlich einfach nur die Aufgabe dumm formuliert ist. Eine unbegrenzte Anzahl von Parametern/Werten ist einfach nicht möglich. Es wird auch nicht spezifiziert, welche Art von Zahlen verwendet werden soll. So könnte auch byte oder double gemeint sein.naja du willst einen haufen an parametern haben das hat man anfangs mit nem array gelöst
Java:public void calculateNumbers(char mathSymbol,int[] numbers) { // ... }
Java hat für eine "unbekannte menge" an parametern was in die sprache eingebaut
was gleich beudeutend ist ansichCode:public void calculateNumbers(char mathSymbol,int... numbers) { // ... }
in der methode kannst du dann auf die numbers werte auch wie in einem array zugreifen, nur man kann "beliebig viele" ints übergeben und muss nicht zuerst ein array machen, du kannst aber trotzdem ein array übergeben oder irgendwas was eine Collection ist wie zb eine Liste oder Arraylist oder was es sonst noch gibt
mal ein beispiel code den du ausprobieren kannst
Code:public class MyClass { public static void main(String args[]) { calculateNumbers('+',1,2,3,4); } public static void calculateNumbers(char mathSymbol,int... numbers) { for (int number : numbers) { System.out.println(number); } } }
final int a = Integer.MAX_VALUE / 2;
final int b = a + 3;
System.out.println(a + " " + b + " " + (a + b));
final BigInteger sum = BigInteger.valueOf(a).add(BigInteger.valueOf(b));
System.out.println(a + " " + b + " " + sum);
Wir haben aber die klare Aussage, dass es Programmparameter sein sollen. Damit hat die Aufgabe bereits eine Limitierung der Anzahl der Parameter bezüglich der Anzahl. Daher ist die Begrenzung auf Integer.MAX_VALUE durch das Programm absolut unkritisch, denn die Beschränkung durch die Systeme ist hier viel strenger.Das entspricht aber nicht der Aufgabe! Da steht "beliebig viele Zahlen" usw..
Also das kann man ja direkt schreiben.
Die wichtigen technischen Punkte sind ja dabei:
- Wie bekommt man die Programmparameter im Programm?
- Kannst Du dann auf den letzten Parameter zugreifen und diesen auswerten?
- Wie kannst Du dann alle Parameter durchgehen um damit etwas zu machen?
- Wie bekommst Du aus einem Parameter eine Zahl?
Wenn du diese technischen Punkte kannst, dann kannst Du den Algorithmus beschreiben. Wie gehst Du vor? Kannst Du es in Worten beschreiben?
falls du den scanner schon hattest kannst du diese so in das programm kriegenWie bekommt man die Programmparameter im Programm?
sarkasmus anDas entspricht aber nicht der Aufgabe! Da steht "beliebig viele Zahlen" usw.. Ein Array sind aber nicht beliebig viele Zahlen, sondern nur Integer.MAX_VALUE viele Zahlen. Wobei vermutlich einfach nur die Aufgabe dumm formuliert ist. Eine unbegrenzte Anzahl von Parametern/Werten ist einfach nicht möglich. Es wird auch nicht spezifiziert, welche Art von Zahlen verwendet werden soll. So könnte auch byte oder double gemeint sein.
Bei der Übergabe von int ist zu beachten, das bei der Addition der Werte, der Wertebereich des Ergebnisses nicht mehr im Bereich von int liegen könnte. In dem Fall würde es dann zu einem Überlauf kommen und das Ergebnis wäre plötzlich negativ. Gleiches gilt für die Subtraktion. Vermeiden kann man das Problem mit der verwendung passender Datentypen, z.B. BigInteger
Java:final int a = Integer.MAX_VALUE / 2; final int b = a + 3; System.out.println(a + " " + b + " " + (a + b)); final BigInteger sum = BigInteger.valueOf(a).add(BigInteger.valueOf(b)); System.out.println(a + " " + b + " " + sum);
Das sind dann aber User Eingaben und keine Parameter des Programmes. Die Parameter des Programmes (auch Kommandozeilen Parameter genannt) bekommst Du in der main Methode über den ParameterIch hab mir halt gedacht ich nutze den Scanner.
String[] args
Nein, die bekommst Du in main übergeben:Ich hab mir halt gedacht ich nutze den Scanner
public static void main(String[] args) {
}
args
sind die Parameter.java Parameteruebergabe 1 2 3 +
args
die Strings "1", "2", "3" und "+".falls du den scanner schon hattest kannst du diese so in das programm kriegen
falls du noch keien möglichkeit gelernt hast diese ins programm zu kriegen, dann einfach hardcoden also einfach rein tippen wie ich es zum beispiel gemacht hatte
"Das sind dann aber User Eingaben und keine Parameter des Programmes."Das sind dann aber User Eingaben und keine Parameter des Programmes. Die Parameter des Programmes (auch Kommandozeilen Parameter genannt) bekommst Du in der main Methode über den ParameterString[] args
Die anderen Ideen wären interessant, so man von einer Eingabe ausgeht. Aber die haben wir nicht. Wir haben hier jetzt ein Array aus Strings, die die Programmparameter enthalten.
Kannst Du mit dieser Information die Fragen erneut betrachten?
Nein, der Aufruf des Programms ist eindeutig (s. dazu auch meinen Nachtrag in #11).In Aufgabenstellung steht: Lesen Sie alle Parameter ein und führen Sie eine Addition bzw. eine Subtraktion auf alle übergebenen Zahlen aus.
java Parameteruebergabe .....
Wer weiß?niemand wird erschossen wenn man was extra macht auch wenns nicht verlangt wird
Mit dem Einlesen ist gemeint, dass man einen Scanner benutzt, um die Werte "einzulesen".Hier ist entweder der Aufgabentext falsch oder der Beispielaufruf des Programms. Ich vermute, dass der Punkt mit dem "Einlesen" da einfach nicht hingehört. Gleich danach steht ja auch, dass etwas "übergeben" wird, was nicht das Gleiche ist wie Einlesen.
Ich vermute mal, dass hier statt dem Einlesen gemeint war, die Strings nach Int zu konvertieren oder so was.
Indem Du das Array args benutzt.Beliebig viele Parameter einlesen? Wie soll ich das machen, wenn keine Array Listen erlaubt sind?
public static void main(String[] args) {
// args beinhaltet die beim Aufruf übergebenen Parameter
}
Mit dem Einlesen ist gemeint, dass man einen Scanner benutzt, um die Werte "einzulesen".
public static void main(String[] args) {
String params = "";
for (String arg : args) params += " " + arg;
Scanner sc = new Scanner(new StringReader(params));
}
Dann ist das schlichtweg falsch:Mit dem Einlesen ist gemeint, dass man einen Scanner benutzt, um die Werte "einzulesen".
D. h. ich lese die Zahlen alle in ein String-array ein und schau dann am Ende ob ein + oder - eingelesen wurde.
Dann führe ich die entsprechende Operation aus.
MFG
Beispiel:
java Parameteruebergabe 1 2 3 + ->6 (=1+2+3)
java Parameteruebergabe 10 2 3 - ->5 (=10-2-3)
Am Anfang steht ganz klar, dass das Programm Programmparameter übergeben bekommt, die Zeilen zur Ausführung unterlegen das, es gibt keinen einzigen Hinweus auf eine Benutzereingabe aber weil da irgendwo mal das Wörtchen "einlesen" auftaucht, muss es ja unbedingt ein Scanner sein... Wenn er meint, dann gibts halt Code aus #21.Dann ist das schlichtweg falsch:
Ja, den find ich gutAm Anfang steht ganz klar, dass das Programm Programmparameter übergeben bekommt, die Zeilen zur Ausführung unterlegen das, es gibt keinen einzigen Hinweus auf eine Benutzereingabe aber weil da irgendwo mal das Wörtchen "einlesen" auftaucht, muss es ja unbedingt ein Scanner sein... Wenn er meint, dann gibts halt Code aus #21.
also ich zieh meine aussage zurück:Wer weiß?![]()