Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
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:
public class Analyse {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[]array = new int[] {3,18,2,108,-1};
int i =0;
boolean b;
Analyse a = new Analyse();
while (i<=5) {
try {
b=a.check(array[i]);
System.out.println(b);
}
catch (IllegalArgumentException e) {
System.out.println(e.getMessage());
}
i=i+1;
}
}
public boolean check(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) throw new IllegalArgumentException ("Diese Zahl mag ich nicht");
return ((n==9)||(n==0));
}
public boolean check2(int n) {
return check(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?