Methodenaufruf mit geänderten Argumenten

Cepheus

Mitglied
Ich bitte um eine Erklärung, warum der nachfolgende Code die Ausgabe 1 liefert:
Java:
        int i = 1;
        System.out.println( Math.max( i++, --i ) );        // 1
Danke im Voraus,
Cepheus
 

KonradN

Super-Moderator
Mitarbeiter
Die Reihenfolge der Ausführung sind hier wichtig.

++i Hier wird erst i erhöht und dann der Wert genommen.
i-- Hier wird erst der Wert von i genommen und dann i reduziert.

Damit wird da i erst erhöht und dann der Wert genommen (2), dann wird Max von 2 und 1 genommen und ausgegeben. Dann wird i um 1 reduziert.

Da auf dem Smartphone geschrieben hat die Autokorrektur einige i groß gemacht … hier geht es immer um die Variable i


Edit: Bitte die übernächste Antwort anschauen für bessere / richtige Erklärung. Und "i"s korrigiert.
 
Zuletzt bearbeitet:

KonradN

Super-Moderator
Mitarbeiter
Erklärung war prinzipiell richtig, aber beim Schreiben hatte ich das falsch herum im Kopf. Der Pre Operator ist das — also wird da I reduziert und die 0 genommen. Es geht also um max(1,0) was 1 ist.

Edit: Bitte die folgende Antwort anschauen für bessere / richtige Erklärung.
 
Zuletzt bearbeitet:

KonradN

Super-Moderator
Mitarbeiter
Ok, jetzt doch noch einmal schnell an den Rechner - die Frage ist sonst doch zu oberflächig oder gar falsch beantwortet. Was haben wir hier?

Wir haben einen Methodenaufruf: Math.max( Param1, Param2)
Bei einem Methodenaufruf werden die Parameter von Links nach Rechts ausgewertet. Also hier erst Param1 und dann Param2

Param1 ist i++, d.h. es wird erst der Wert von i genommen. Dann wird i erhöht. Nach Auswerten des ersten Parameters ist i dann 2.
Param2 ist --i, hier wird erst der Wert von i um 1 reduziert und dann wird der Wert von i genommen. Damit wird hier auch wieder 1 genommen und i ist danach 1.

Sorry, für mögliche Verwirrung durch erste überschnelle Antworten auf dem Smartphone. Kurz vor dem ins Bett gehen sollte ich nichts auf dem Smartphone schreiben ... zumindest nicht ohne richtig nachzudenken.
 

KonradN

Super-Moderator
Mitarbeiter
Evtl. etwas Code zum spielen um dies etwas besser auszuprobieren:

Java:
    static void print(int... values) {
        for (int value : values)
            System.out.println(value);
    }

Da kannst Du dann die Auswertung der Parameter relativ gut beobachten. Also z.B. mit einem Aufruf von
Java:
        int i = 1;
        print(i++, i, --i);

Das zeigt dann halt:
  • Was wird bei i++ am Ende übergeben?
  • Was ist i nach der Auswertung des ersten Parameters?
  • Was wird dann bei --1 übergeben?

Da erkennt man dann relativ gut, dass erst der Parameter i++ ausgewertet wird. Da i 1 war, wird 1 als Parameter übergeben und danach ist i == 2. Daher ist der zweite Parameter 2. Beim dritten Parameter wird i erst reduziert und dann der Wert übergeben. Der ist dann wieder 1.
Die Ausgabe ist dann also
1
2
1

Das evtl. einfach um einmal damit etwas zu spielen.
 

philanthrop

Bekanntes Mitglied
Das erste Argument bekommt 1, das zweite Argument bekommt 0. Das Max von 0 und 1 ist 1. Die Post-Inkrementierung erfolgt erst nach dem Max-Methodenaufruf.
Sorry, ich hatte, ähnlich wie Konrad, gerade voll daneben gehauen:

Java:
    public static void main(final String[] args) {
        System.out.println("Hello world !!!");
        int i = 1;
        print(i++, --i);
    }

    public static void print(int a, int b) {
        System.out.println(a + "  " + b);
    }

Die Ausgabe ist 1 und 1. Die Auswertung der Argumente erfolgt von links nach rechts.
 

philanthrop

Bekanntes Mitglied
So würde es noch einmal deutlicher werden:

Java:
    public static void main(final String[] args) {
        System.out.println("Hello world !!!");
        int i = 1;
        print(i++, i, --i);
    }

    public static void print(int a, int c, int b) {
        System.out.println(a + "  " + c + "  " + b);
    }

***

Bitte aber auch daran danken, dass man das in der Praxis so nicht machen würde.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Methoden Methodenaufruf rekursiv zählen Java Basics - Anfänger-Themen 4
N methodenaufruf for each geht nicht Java Basics - Anfänger-Themen 2
K Methodenaufruf /-ausgabe Java Basics - Anfänger-Themen 5
O Methodenaufruf Java Basics - Anfänger-Themen 5
V Neue Ausgabe von toString nach Methodenaufruf Java Basics - Anfänger-Themen 9
Queiser Methodenaufruf Java Basics - Anfänger-Themen 2
J Vererbung und Methodenaufruf Java Basics - Anfänger-Themen 11
I Java Methodenaufruf Java Basics - Anfänger-Themen 9
A OOP Methodenaufruf in einer anderen Klasse Java Basics - Anfänger-Themen 2
G Methoden Probleme beim Methodenaufruf Java Basics - Anfänger-Themen 2
M Methodenaufruf über SQL UPDATE Java Basics - Anfänger-Themen 8
M Methodenaufruf in der Main Datei funzt nicht Java Basics - Anfänger-Themen 13
BadBat Klassen instanz als variable + methodenaufruf Java Basics - Anfänger-Themen 4
M Methodenaufruf in Methode Java Basics - Anfänger-Themen 6
M Objekt Name für MethodenAufruf nachträglich zuweisen? Java Basics - Anfänger-Themen 2
J if() mit Methodenaufruf kombiniert (Pixelerkennung) Java Basics - Anfänger-Themen 3
A Probleme beim Methodenaufruf von Object[] ! Java Basics - Anfänger-Themen 12
A Probleme beim Methodenaufruf von char[] ! Java Basics - Anfänger-Themen 10
T Rekursiver Methodenaufruf funktioniert nicht Java Basics - Anfänger-Themen 7
D Methoden g.setColor funktioniert nicht bei Methodenaufruf in anderer Klasse Java Basics - Anfänger-Themen 1
M Methoden Methodenaufruf allgemein Java Basics - Anfänger-Themen 3
H Ist Math.Random() eine Methode oder ein Methodenaufruf (Klausurfrage) Java Basics - Anfänger-Themen 4
O Methodenaufruf Java Basics - Anfänger-Themen 6
F Methodenaufruf Java Basics - Anfänger-Themen 1
F Erste Schritte Label Text vor Methodenaufruf setzen Java Basics - Anfänger-Themen 17
J Array mit Methodenaufruf Java Basics - Anfänger-Themen 2
S Problem bei Vererbung und Methodenaufruf Java Basics - Anfänger-Themen 3
OnDemand Methodenaufruf Java Basics - Anfänger-Themen 3
A Methoden Benutzerdefinierter Methodenaufruf Java Basics - Anfänger-Themen 4
O Methodenaufruf - Inhaltsveränderung Java Basics - Anfänger-Themen 23
G Methodenaufruf anderer Klasse Java Basics - Anfänger-Themen 18
L Einfacher Methodenaufruf vs. Objekt Java Basics - Anfänger-Themen 4
O Methodenaufruf im Konstruktor Java Basics - Anfänger-Themen 6
G was ist ein Methodenaufruf mit (){}? Java Basics - Anfänger-Themen 6
S Methoden Klassen Definition - Methodenaufruf Java Basics - Anfänger-Themen 7
K Methoden Methodenaufruf für BufferedWriter .. Java Basics - Anfänger-Themen 5
feardorcha Methodenaufruf Übergabe- und Rückgabewert Java Basics - Anfänger-Themen 5
W Methodenaufruf innerhalb einer Klasse - static vs. this Java Basics - Anfänger-Themen 3
A Problem bei Methodenaufruf Java Basics - Anfänger-Themen 6
B Parameterausführung bei Methodenaufruf Java Basics - Anfänger-Themen 8
A Methodenaufruf Java Basics - Anfänger-Themen 4
P Vererbung Methodenaufruf funktioniert aber Wertzuweisung von Variablen nicht Java Basics - Anfänger-Themen 9
S methodenaufruf Java Basics - Anfänger-Themen 8
G Erste Schritte Methodenaufruf, Variablen-Deklaration Java Basics - Anfänger-Themen 6
L Methodenaufruf in main() Java Basics - Anfänger-Themen 3
M Methodenaufruf in for-Schleife - nur 1 mal ausgegeben Java Basics - Anfänger-Themen 3
I Externer Methodenaufruf, Punkt-Notation Java Basics - Anfänger-Themen 11
I Methoden Rückverfolgung Methodenaufruf Java Basics - Anfänger-Themen 15
E Methoden Wie kann ich eine Methode so schreiben, dass Methodenaufruf polymorph erfolgen kann? Java Basics - Anfänger-Themen 8
M Methoden Methodenaufruf mit .class. Java Basics - Anfänger-Themen 2
J rekursiver Methodenaufruf Java Basics - Anfänger-Themen 12
K Klassen this-Referenz und Klassen/Methodenaufruf Syntax Java Basics - Anfänger-Themen 3
T Java mehrfacher Methodenaufruf Java Basics - Anfänger-Themen 15
L Methodenaufruf aus anderer Klasse Java Basics - Anfänger-Themen 5
B Quicksort --> Methodenaufruf Java Basics - Anfänger-Themen 10
O Methodenaufruf Java Basics - Anfänger-Themen 4
A nullPointerException bei Methodenaufruf Java Basics - Anfänger-Themen 16
J Vererbung, Methodenaufruf Java Basics - Anfänger-Themen 4
M Problem bei Methodenaufruf aus ActionListener Java Basics - Anfänger-Themen 5
G Methodenaufruf aus der Kommandozeile Java Basics - Anfänger-Themen 28
N Methodenaufruf funtioniert nicht Java Basics - Anfänger-Themen 3
C Methodenaufruf mit Variablen die gesetzt werden Java Basics - Anfänger-Themen 10
Antoras mit ActionListener/Methodenaufruf Textfelder zeichnen Java Basics - Anfänger-Themen 4
G Dynamischer Methodenaufruf Java Basics - Anfänger-Themen 3
G Methodenaufruf über ein Objekt einer anderen Klasse Java Basics - Anfänger-Themen 7
H ungültige methodenaufruf Java Basics - Anfänger-Themen 16
G Methodenaufruf Java Basics - Anfänger-Themen 3
G Frage zu Oberklasse bei Methodenaufruf Java Basics - Anfänger-Themen 2
V Dynamischer Klassen bzw. Methodenaufruf Java Basics - Anfänger-Themen 6
V Wie und wieso geht dieser Methodenaufruf? Java Basics - Anfänger-Themen 2
S Methodenaufruf Java Basics - Anfänger-Themen 6
G Methodenaufruf in der for-Schleife mit Array Java Basics - Anfänger-Themen 7
L hsqldb Methodenaufruf Java Basics - Anfänger-Themen 10
K synchron und asynchroner Methodenaufruf Java Basics - Anfänger-Themen 17
R Fehler bei Methodenaufruf Java Basics - Anfänger-Themen 2
G Methodenaufruf Java Basics - Anfänger-Themen 3
T NullPointerException bei Methodenaufruf Java Basics - Anfänger-Themen 2
G Methodenaufruf Java Basics - Anfänger-Themen 10
K Klassenübergriefendes Methodenaufruf Problem Java Basics - Anfänger-Themen 6
S methodenaufruf. Java Basics - Anfänger-Themen 16
G methodenaufruf Java Basics - Anfänger-Themen 4
E Methodenaufruf mittels variable? kA Java Basics - Anfänger-Themen 5
G methodenaufruf Java Basics - Anfänger-Themen 3
G methodenaufruf Java Basics - Anfänger-Themen 5
W Überschreiben und Methodenaufruf Java Basics - Anfänger-Themen 3
L Methodenaufruf zwischen Klassen Java Basics - Anfänger-Themen 3
C Methodenaufruf mit throws IOException Java Basics - Anfänger-Themen 2
K Java Problem mit Übergabe von argumenten Java Basics - Anfänger-Themen 3
O Problem mit optionalen Argumenten - Apache CLI - Java Basics - Anfänger-Themen 2
V Frage zu Argumenten & Paramentern Java Basics - Anfänger-Themen 25
H Funktion mit Argumenten Java Basics - Anfänger-Themen 5
J Argumenten eingabe Netbeans Java Basics - Anfänger-Themen 5
F compareTo - Sortierung nach 2 Argumenten Java Basics - Anfänger-Themen 10
M Übergabe von VM Argumenten Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben