Java Problem bei Aufgabe

Status
Für weitere Antworten geschlossen.

wirelessy

Captain
Registriert
Nov. 2008
Beiträge
3.878
Hallo,
in der Schule ist mir heute eine Zusatzaufgabe gestellt worden. Die Aufgabenstellung lautet:
Überprüfe ob eine beliebig große Zahl durch 3 oder 5 teilbar ist.

Die Teilbarkeit durch 3 war nicht so schwer festzustellen, rein theoretisch ist auch die Teilbarkeit durch 5 kein Problem (letzte Ziffer 0 oder 5). Umsetzen konnte ich das allerdings nicht... kann mir da jemand auf die Sprünge helfen? Ich hab da grade irgendwie n Brett vorm Kopp.
Das ist mein bisheriger Text, der allerdings nicht funktioniert... bis auf den Teil mit der 3. Mit dem grünen Teil bin ich also zufrieden, am Rest wird wohl noch was geändert werden müssen.

public boolean Rechner(String zahl)
{
int nZ = 0;
int lZ = zahl.charAt(zahl.length());

boolean wahr;
for(int i=0; i<zahl.length(); i++)
{
nZ += zahl.charAt(i) - 48;
}

if(nZ%3==0 || lZ==5 || lZ==0)
{
wahr=true;
}
else
{
wahr=false;
}
return wahr;
}
 
Bei der 3 verwendest Du schon die Modulorechnung, warum nicht auch bei der 5?

Das Ganze ist übrigens ein Einzeiler, schlag mal in einem x-beliebigen Javabuch die ?:-Notation nach.
 
Dein Index ist zu groß. zahl.length()-1 muss es heißen

Nachtrag: nur in der 3. Zeile
 
Zuletzt bearbeitet: (Nachtrag)
Modulo ist mir durchaus bekannt, nur hat Int bzw. auch Long nunmal ne gewisse Größenbegrenzung - und siehe Aufgabenstellung: "beliebig große Zahl".
Zu "?:-Notation" spuckt Google nichts aus.
Archie2's Tipp war allerdings richtig, danke dafür :). Kannst du mir das mit dem Index aber nochmal genauer erklären, da blick ich nicht durch und meine Lehrerin hält Erklärungen leider auch für unnötig :/.

//edit: Achso danke, habs verstanden, length() fängt bei 1 an zu zählen, charAt() bei 0.
 
Code:
Boolean ergebnis = (teilbar5 || teilbar3) ? true : false;

...jetzt wo ichs sehe, vergiss es :) es geht schlichter:
Code:
return (teilbar5 || teilbar3);
 
Beliebig große Zahl, wie es in deiner Aufgabenstellung heißt, is so eine schwammige Beschreibung... Für eine beliebig große Zahl bräuchtest du unendlich viel RAM, und den hast du nicht... ^^
 
Zuletzt bearbeitet:
Hast du auch wieder recht^^
Danke kuddlmuddl, ich werds mir anschauen.
Sardellenpizza, erklär dich - durch deinen Code schau ich mal garnicht durch.

//edit: Kuddlmuddl, wie setze ich diesen Datentyp denn ein?
 
Zuletzt bearbeitet:
charAt() liefert die Ziffer,
also '0' - '9', nicht die Zahl 0 bis 9

die Ziffer '0' entspricht dem Ascii-Wert 48
die Ziffer '1' dem Wert 49 ... (schau mal bei Wikipedia Stichwort ascii)

daher die Zeile "nZ += zahl.charAt(i) - 48;"
wenn zahl.charAt(i) die Ziffer '0' liefert, dann steht in der Gleichung
0 = 48 - 48;
In diesem Fall konvertierst du die Ziffer in die entsprechende Zahl.


Aber dich interessiert jetzt, ob die letzte Ziffer eine '5' ist oder '0'
(also eine Ziffer, keine Zahl)
Daher könntest Du so auswerten:

...
char lZ = zahl.charAt(zahl.length() - 1);
...
if(nZ%3==0 || lZ=='5' || lZ=='0')
...


Eine kürzere Schreibweise wäre möglich, wie Sardellenpizza vorschlug -
anstatt der gesamten if-Anweisung könntest du schreiben:

return (nZ%3==0 || lZ=='5' || lZ=='0');
 
Joar, das mit dem ASCII hab ich selbst auch verstanden, aber anstelle der '5' bzw '0' hab ich jetzt am Ende von lZ nochmal 48 abgezogen. Wobei, deins ist sauberer, ist so übernommen.
Die return-Anweisung find ich auch recht interessant, kannte ich so noch nicht. Ist eingebaut, die Funktionsweise ist ja auch eigentlich logisch...

Danke nochmal, Aufgabe gelöst und ihr habt wieder bewiesen, was für ein tolles Forum ihr seid :).
 
Status
Für weitere Antworten geschlossen.

Ähnliche Themen

Antworten
3
Aufrufe
1.223
Antworten
12
Aufrufe
1.745
R
Antworten
2
Aufrufe
1.014
K
  • Gesperrt
Antworten
5
Aufrufe
1.081
Zurück
Oben