ich habe einen Code und versuche die Ausgaben nachzuvollziehen. Ich verstehe alle Ausgaben außer die false und true Ausgaben. Die Methode check gibt bei n <= 10 n==0 oder n==9 als boolean zurück. Laut den Ausgaben wir erst false zurückgegeben und dann true und dann immer abwechselnd. Die Anweisung in der check Methode lautet: return ((n==9)||(n==0));
Wieso wird erst false zurückgegeben und dann true und dann immer abwechselnd? Liegt es daran das die Variable b anfangs nicht initialisiert ist und den default wert false gespeichert hat und wird dann abwechselnd false und true zurückgegeben wegen der ODER Anweisung?
Vielen Dank.
Die Ausgaben lauten:
Checking 3
false
Checking 18
true
Checking 2
false
Checking 108
true
Checking -1
Diese Zahl mag ich nicht
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
at Analyse.main(Analyse.java:14)
Der Code lautet:
Java:
publicclassAnalyse{publicstaticvoidmain(String[] args){// TODO Auto-generated method stubint[]array =newint[]{3,18,2,108,-1};int i =0;boolean b;Analyse a =newAnalyse();while(i<=5){try{
b=a.check(array[i]);System.out.println(b);}catch(IllegalArgumentException e){System.out.println(e.getMessage());}
i=i+1;}}publicbooleancheck(int n){System.out.println("Checking "+n);while(n>10){int m = n%10;do{
n/=10;
m+= n%10;}while(n>0);
n=m;}if(n<=0)thrownewIllegalArgumentException("Diese Zahl mag ich nicht");return((n==9)||(n==0));}publicbooleancheck2(int n){returncheck(n*n);}}
also bei n =3 wird hier gar nicht reingesprungen. Dann wird direkt zu dieser Anweisung übergegangen:
return ((n==9)||(n==0));
und n hat ja noch den Wert 3. Wieso wird dann false ausgegeben?
Bei n = 18 wird in die while Schleife n> 10 gesprungen.
Außerhalb der do/while schleife kommt raus: int m = 18%10= 8
innerhalb der doSchleife:
dann n=18/10=1
dann m=8+(1%10)=8+1=9;
dann wird n=m zugewiesen also n hat den wert 9.
n ist dann kleiner als 10 deswegen wird die obere while schleife nicht mehr ausgeführt. Dann hat n den wert 9 und es wird true ausgegeben, da return ((n==9)||(n==0));
Richtig?
Aber wie kommt bei n =3, false raus? bzw. dann der Wert 0 für n=3?
Oke verstanden .. also wenn n=3 ist dann ist es keines von beiden, weil es nicht 9 und nicht 0 entspricht und dann wird false zurückgegeben.
Bei n=9, entspricht n==9, daher wird true zurückgegeben.
Und wenn n=0 ist dann entspricht ja n==0, dann wird auch true zurück gegeben?
Oke verstanden .. also wenn n=3 ist dann ist es keines von beiden, weil es nicht 9 und nicht 0 entspricht und dann wird false zurückgegeben.
Bei n=9, entspricht n==9, daher wird true zurückgegeben.
Und wenn n=0 ist dann entspricht ja n==0, dann wird auch true zurück gegeben?