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.
Schreiben sie eine Methode gibGrößtesEndstück(int n), die das größte
absteigende Endstück ausgibt (keine if Anweisungen und Schleifen!).
z.B. gibGrößtesEndstück(3246765) : 765
gibGrößtesEndstück(324665) : 65
gibGrößtesEndstück(3246265) : 65
gibGrößtesEndstück(32467) : 7
gibGrößtesEndstück(8) : 8
gibGrößtesEndstück(0) : 0
Also was zeichnet denn das größte Endstück aus? Welche Eigenschaft muss das genau haben?
Und die Bedingung, kein if zu verwenden ist etwas seltsam. Der Conditional Operator ist ja streng genommen nichts anderes. Aber ok, das wird ja so vorgegeben worden sein....
Schauen wir uns Deinen Code an: Da scheint die Bedingung falsch zu sein, denn wenn n >= 10 ist, dann gibst du n zurück. Ist es kleiner als 10, dann machst Du Berechnungen, die keinen Sinn ergeben. n % 10 macht keinen Sinn bei n < 10. Also vermutlich hast Du einfach die Reihenfolge vertauscht.
Und dann fehlt da natürlich noch etwas. Du hast da ja noch einen Conditional Operator: Und da fehlt, was gemacht werden soll, wenn die zweite Bedingung nicht wahr ist.
Und die Rückgabe, wenn die zweite Bedingung richtig ist, ist so nicht korrekt. Die letzte Ziffer ist kleiner als die vorletzte Ziffer, also hast Du als Rückgabe: die letzte Ziffer + 10*Rekursiver Aufruf von den Übrigen Ziffern.
Schreib doch einfach einmal auf:
- was ist die letzte Ziffer?
- was ist die vorletzte Ziffer?
- Was ist der Rest ohne die letzte Ziffer?
Also Code von Dir leicht verbessert und mit Anmerkungen:
Java:
return (n < 10) // Bedingung umgedreht...
? n // Das ist die Rückgabe bei n < 10
: (n % 10) < (n / 10 % 10) // Zweiter Conditional Operator ...
? 10 * gibGrößtesEndstück(n % 10) + (n / 10 % 10) // Das sieht nicht korrekt aus.
: // Hier fehlt noch etwas, vermutlich 0?
Ich Nehme Zahl = 3246765
-Die letzte Ziffer : Zahl % 10 = 5
-Die vorletzte Ziffer: Zahl / 10 % 10 = 6
-Der Rest ohne die letzte Ziffer: Zahl / 10 = 324676
Zahl = 3246765
Also das Ergebnis hier ist : 765
-Um das zu bekommen hat man die Zahl / 1000 gemacht.
-Ab hier 46<7 haben wir die Zahl ausgeschnitten : Hier ist eigentlich das Problem. Ich würde hier abzählen wie viel mals von 1 Ziffer kleiner als die letzte ist + 1. Also hier 32467>6>5 (2+1=3) und dann die Zahl durch 10^3 = 1000 teilen.
Du hast Dir doch irgend was gedacht mit zahl kleine 10. Was ist, wenn die Zahl kleiner 10 ist und was ist, wenn die Zahl nicht kleiner 10 ist?
Wenn die Zahl größer 10 ist: Was vergleichst Du und was gibst Du dann ggf. zurück?
Das könntest Du formulieren, denn dann hättest Du die Basis um den Code zu verbessern.
Sei exakter. Was bedeutet durchlaufen? Du vergleicht die letzte mit der vorletzten Ziffer und machst mit dem Ergebnis nichts? Da musst doch kommen ‚wenn das dann das sonst das‘ ...
Sei exakter. Was bedeutet durchlaufen? Du vergleicht die letzte mit der vorletzten Ziffer und machst mit dem Ergebnis nichts? Da musst doch kommen ‚wenn das dann das sonst das‘ ...