Wie könnte man folgen Aufgabe in Java umsetzen. String-Methoden sind alle erlaubt. Keine array.Listen sind erlaubt?

Y

yfons123

Gast
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
Code:
public void calculateNumbers(char mathSymbol,int... numbers)
{
    // ...
}
was gleich beudeutend ist ansich
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);  
        }
    }
}
 

KonradN

Super-Moderator
Mitarbeiter
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?
 

Oneixee5

Top Contributor
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
Code:
public void calculateNumbers(char mathSymbol,int... numbers)
{
    // ...
}
was gleich beudeutend ist ansich
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); 
        }
    }
}
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.
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);
 

KonradN

Super-Moderator
Mitarbeiter
Das entspricht aber nicht der Aufgabe! Da steht "beliebig viele Zahlen" usw..
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.

Die Problematik mit dem Überlauf besteht tatsächlich, wobei die ganze Diskussion erst einmal hinfällig ist, denn bei der Übung wird es mit sehr großer Sicherheit in erster Linie um das Erlernen von einfachen Basics gehen.
 

OliI.

Mitglied
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?
  • Wie bekommt man die Programmparameter im Programm?
Ich hab mir halt gedacht ich nutze den Scanner. Der Nutzer soll erstmal zwei Zahlen einlesen.
Das Problem ist nun, dass ich keine ArrayList verwenden kann/darf, da wir diese noch nicht kennen.
Wir kennen nur einfache char-Array, String-arrays und die String-Methoden. Mehr nicht.
Also ich lese zwei Zahlen ein. Diese könnte ich in ein int Array speichern, Problem. Ich kann, dann das Array nicht weiter erweitern.
Also müsste ich die Zahlen als String einlesen, und dann immer weiter aneinander ketten.

Dann könnte ich z. B. 5 4 3 2 + einlesen lassen: (Als String stehen die Zahlen natürlich hintereinander und ohne Leerzeichen)
Die Länge des Strings könnte ich ermitteln

Jetzt müsste ich das ganze wahrscheinlich in ein Char-Array einlesen. String.toCharArray ist möglich.
  • Kannst Du dann auf den letzten Parameter zugreifen und diesen auswerten?
Ich könnte jetzt die zuvor ermittelte Länge des Strings nutzen, um den letzten Wert des charArrays auszulesen. Dies ist das Plus

also char vz = chararry[chararray.length-1]
Jetzt habe ich das plusZeichen in einem eigenen char nämlich vz gespeichert.
  • Wie kannst Du dann alle Parameter durchgehen um damit etwas zu machen?
Gute Frage?

for-Schleife einsetzen for(int i = 0; i<= chararray.length;i++)
int ergebnis = chararry[0] + vz ????

Ich müsste jetzt den letzten Wert des chararrys[chararray.length-1) als Wert hinter chararray[0] setzen, um damit die Addition durchführen. Das dies so geht , wie ich hier geschrieben habe. Bezweifle ich.
 
Y

yfons123

Gast
Wie bekommt man die Programmparameter im Programm?
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
 
Y

yfons123

Gast
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.
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);
sarkasmus an
warum nicht gleich eine micro service architektur aufbauen... hatte ja schon strings.. also aufgehts
sarkasmus aus
 

KonradN

Super-Moderator
Mitarbeiter
Ich hab mir halt gedacht ich nutze den Scanner.
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 Parameter String[] 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?
 

mihe7

Top Contributor
Ich hab mir halt gedacht ich nutze den Scanner
Nein, die bekommst Du in main übergeben:
Java:
public static void main(String[] args) {
}
Das args sind die Parameter.

Nachtrag: da @KonradN mal wieder schneller war, füge ich noch hinzu, dass der Aufruf ja mit
Code:
java Parameteruebergabe 1 2 3 +
erfolgt. Bei einem solchen Aufruf enthält args die Strings "1", "2", "3" und "+".
 
Zuletzt bearbeitet:

OliI.

Mitglied
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. Die Parameter des Programmes (auch Kommandozeilen Parameter genannt) bekommst Du in der main Methode über den Parameter String[] 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?
"Das sind dann aber User Eingaben und keine Parameter des Programmes."

Die Zahlen werten einfach über den Scanner eingelesen => In Aufgabenstellung steht: Lesen Sie alle Parameter ein und führen Sie eine Addition bzw. eine Subtraktion auf alle übergebenen Zahlen aus.
 

KonradN

Super-Moderator
Mitarbeiter
Das "Parameter einlesen" bedeutet, dass Du die Parameter auswerten sollst. Ich verstehe, dass es hier zu Missverständnissen kommen kann - die Aufgabe ist aus meiner Sicht schlecht formuliert. Einlesen ist tatsächlich in der Regel das Einlesen von Werten aus einer anderen Quelle (z.B. Eingaben von einem User, der Inhalt einer Datei, ...)

Aber: Die Beispiele sind auch eindeutig! Da sieht man ja den Aufruf auf der Kommandozeile mit java Parameteruebergabe .....
 
Y

yfons123

Gast
rein aus Interesse am programmieren kann man auch beide Varianten mal programmieren..

niemand wird erschossen wenn man was extra macht auch wenns nicht verlangt wird
 

KonradN

Super-Moderator
Mitarbeiter
Wobei die Variante mit dem Scanner deutlich schwerer ist und ohne Datenstrukturen wie eine Arraylist sehr schwer. Mir würde da nur der Weg über die Rekursion einfallen oder - auf Grund der Begrenzung - einfach beides berechnen um dann am Ende nur das gewünschte Ergebnis auszugeben.
 

Neumi5694

Top Contributor
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.
 

OliI.

Mitglied
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.
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
 

Neumi5694

Top Contributor
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
Dann ist das schlichtweg falsch:
Code:
Beispiel:
java Parameteruebergabe 1 2 3 +      ->6    (=1+2+3)
java Parameteruebergabe 10 2 3 -     ->5    (=10-2-3)
Denn hier wird nichts eingelesen, die Parameter liegen als Kommandozeilenparameter vor.
 

Neumi5694

Top Contributor
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.
Ja, den find ich gut :)
Tatsächlich geht's auch 'on the fly' mit 2 Integer-Werten.
1. Startwert, 2. Summe aller nachfolgenden Werte (muss natürlich beim Einlesen laufend aktualisiert werden), die dann anhand des letzten Parameters vom ersten abgezogen oder eben hinzuaddiert wird.
Einen Scanner kriegt auch so sicher noch irgendwo unter.
 

KonradN

Super-Moderator
Mitarbeiter
Es ist ja egal, ob jemand etwas extra machen will. Aber als erstes sollte man die Aufgabe selbst erfüllen. Ansonsten ist es toll, dass Du irgend etwas anderes gemacht hast...

Die Aufgabe ist eindeutig. Die Interpretation der Aufgabe läßt keine Zweifel offen. Der Ansatz, der vom TE gewählt wurde (Einlesen von Werten vom User per Scanner), erfüllt die Aufgabe schlicht nicht.

Darüber muss man nicht weiter diskutieren. Die Fakten sind deutlich genannt und damit ist doch eigentlich das Ende der Diskussion erreicht, oder?
 
Y

yfons123

Gast
in meiner Studienzeit hatte ich immer mit meinen Freunden einen Overkill programmiert und der Prof hat uns auch dabei unterstüzt .. es war halt wichtiger etwas zu lernen als stur aufgaben zu machen und im nachhinein gesehen würde ich es wieder so machen

ich war noch nie der sture hausaufgaben machertyp

aber jedem das seine, mir etwas mehr
 

KonradN

Super-Moderator
Mitarbeiter
Das ist ja toll, dass du geübt hast. Dagegen sagt auch niemand etwas.

Alles, worauf hingewiesen wird:
Aufgabe nicht erfüllt = Setzen Sechs!

Das sollte eigentlich klar und verständlich sein und im Augenblick verstehe ich ehrlich gesagt nicht, wo du gerade Probleme hast.
 

Neumi5694

Top Contributor
Das Problem ist halt, dass der Aufgabentext missverständlich, bzw. einfach nur falsch ist.
Mag sein, dass der Prof eine andere Aufgabe abgeändert hat, ohne auf die Details zu achten. "Lesen Sie alle Parameter ein" sollte im Text nicht vorkommen. Man könnte die Parameter "auswerten" oder "casten" oder "parsen", man kann so vieles damit tun, man kann sie halt nur nicht einlesen im herkömmlichen Sinne.
 

Neue Themen


Oben