Verstandnisfrage

DrIkarus

Mitglied
Guten Morgen,

ich habe eine Frage zu einem Codestück, vielleicht könnt ihr mir das näher bringen :D

Code:
static int f(int j,int i,int k,int l,int b[][])
	    {			
	        return i>j*j?i-1:(b[k][l]=f(j,i+1,(k+(i%j==0?0:1))%j,(l+(i%j==0?-1:1))%j,b))-1;
	    }

Welche Bedeutung hat diese Zeile? Was hat es mit den Fragezeichen und Doppelpunkten auf sich?

Danke!
 
Das ist ein sogenannter Ternärer Ausdruck und nichts anderes als eine kurzschreibweise für if-else.

Code:
return (booleanValue==false) ? 1 : 0;

ist das gleiche wie

Code:
if(booleanValue == false)
    return 1;
else
    return 0;

Möglich sind hiermit z.B. auch solche Konstrukte:

Code:
int i=0;
System.out.println("Hello " + (i == 0 ? "World" : "Universe"));

Grundsätzlich ist das Ganze eine feine Sache, jedoch sollte man es auch nicht übertreiben, da ansonsten die Lesbarkeit deutlich darunter leidet.

Gruß Sebastian
 
Zuletzt bearbeitet:
In Zeile 3 wird der so genannte ternäre Ausdruck verwendet:

Code:
$BEDINGUNG ? $IF : $ELSE

Wenn $BEDINGUNG wahr ist, wird $IF verwendet, ansonsten $ELSE.

Es gibt einige wenige Gelegenheiten, an denen man den ternären Operator wirklich sinnvoll einsetzen kann - dies hier ist aber definitiv keine davon! Die Zeile ist völlig unverständlich, ein if - else Konstrukt mit Kommentaren würde wahrscheinlich dazu führen, dass der Code selbsterklärend ist...

EDIT: zu spät...
 
Hi,

anders ausgedrückt könntest du den Einzeiler wie folgt schreiben:
Java:
if(i > j*j) {
  return i-1;
} else {
  b[k][l] = f(j,
    i+1,
    (k+(i%j==0 ? 0 : 1))%j,
    (l+(i%j==0 ? -1 : 1))%j,
    b
  );
  return b[k][l]-1;
}

Die ternären Ausdrücke im Funktionsaufruf von f() könnte man auch noch rausziehen und aufspalten, würde aber das ganze nur unnötig länger machen.
Grundsätzlich kann man bei ternären Asudrücken auf die Faulheit der Programmierer schließen, vorallem im obigen Fall ;)

Gruß
BK
 
Boah, das ging ja flott, danke euch!
Also ist diese Zeile nur eine umständliche if-then-else Schreibweise.
Und das Fragezeichen gehört zu einem Konstrukt mit den Doppelpunkten, die if then else ausdrücken.
So ist das doch sehr verständlich :)
 
Zurück