An die Java Experten

Es gibt 6 Antworten in diesem Thema, welches 632 mal aufgerufen wurde. Der letzte Beitrag (8. Dezember 2011 um 15:50) ist von Nysrogh.

  • Hi,

    gleich vorweg, ich hab keinen Plan davon wie es geht.
    Aber vielleicht kann mir hier einer helfen.
    Und zwar:

    Schreiben Sie nun eine Klasse Rekursion, welche folgende rekursive Methoden beinhaltet

    public static int dreheZahl(int n), welche die Ziffernfolge der übergebenen Zahl umdreht und das Resultat zurückgibt
    public static int dreheZahl(int n)
    {
    String alt = String.valueOf(n); //Erstelle String mit der Ziffernfolge n


    for ( int j = alt.length()-1; j >= 0; j-- )

    dreheZ += (alt.charAt(j));

    int nnew = Integer.parseInt("dreheZ");


    return nnew;

    }

    Schonmal danke

    Am Öl kann es nicht gelegen haben, es war ja gar keines drinnen...

  • Hast du diese Methode geschrieben?
    Was ist 'dreheZ'?

    "He, who trades freedom for temporary security, deserves neither freedom nor security."
    ("Jene, die Freiheit aufgeben, um eine vorübergehende Sicherheit zu erwerben, verdienen weder Freiheit noch Sicherheit.") --- Benjamin Franklin

  • So,

    habs anderstweitig gelöst bekommen, trotzdem danke.

    Wen es interessiert:
    public static int dreheZahl(int n)
    {
    String alt = String.valueOf(n); //Erstelle String mit der Ziffernfolge n


    String dreheZ = "";

    for ( int j = alt.length()-1; j >= 0; j-- )

    dreheZ += (alt.charAt(j));

    return Integer.parseInt(dreheZ);


    }

    Am Öl kann es nicht gelegen haben, es war ja gar keines drinnen...

  • Aha,

    wissen wir immerhin schon, was 'dreheZ' ist.

    Also die Lösung ist so nicht ganz richtig.

    Erstens ist das strenggenommen keine rekursive Methode 'public static int dreheZahl(int n)', sondern nur ein Teil der Methode ist rekursiv..
    Außerdem brauchst du eine Klasse, die die Methode entjhält.

    "He, who trades freedom for temporary security, deserves neither freedom nor security."
    ("Jene, die Freiheit aufgeben, um eine vorübergehende Sicherheit zu erwerben, verdienen weder Freiheit noch Sicherheit.") --- Benjamin Franklin

  • tesro70 hat es ja schon gesagt.

    Du hast da nur eine Methode und keine Klasse und dann soll die Methode an sich rekursiv sein.

    Du darfst String benutzen? Dann doch so:

    public static String reverse(String s)
    {
    if(s==null || s.equals(""))
    return "";
    return s.substring(s.length()-1)+reverse(s.substring(0,s.length()-1));
    }

    Einmal editiert, zuletzt von Nysrogh (6. Dezember 2011 um 22:23)

  • Hmmm.

    Ich hab beim Startbeitrag gesehen, daß es eine rekursive Methode sein soll, die so heißen soll: public static int dreheZahl(int n).
    Also passt das von Nysrogh so gesehen nicht, auch wenns läuft.
    Nur: Strings und Java, das geht auf Speicher und Laufzeit.


    Nu les ich das noch mal durch und es kommt durch, daß wohl die gesamte zu drehende Zahl übergeben werden soll.


    Das macht mich mal a bissle stutzig. Wenn ich die ganze Zahl übergebe, hab ich keine Rekursion der Methode nötig. Im Gegenteil, da ist das dann heftig umständlich (was es ja sowieso ist, die schnellste Methode wäre eine charAt-Schleife (und die speicherschonendste)).


    Hab mal ne Klasse geschrieben, wo eine Methode einen int bekommt (allerdings nur den Index +1) und sich bei Bedarf selbst aufruft.


    Wie bereits gesagt, schöner und speicherschonender ist es nicht rekursiv mit ner charAt-Schleife.

    Habs auch extra a bissle ausführlicher geschrieben, vielleicht kommt dann das Verständnis beim TE noch. ;^)


    package turnaround;


    public class Zahlendreher {


    static int counter;
    static int neueZahl;
    static String alt;
    static String neu;


    public static void main(String[] args) {
    neu = "";
    int n = 123567;
    alt = String.valueOf(n);
    counter = alt.length();
    dreheZahl(counter);
    }


    public static int dreheZahl(int counter) {
    counter--;
    neu += (alt.charAt(counter));
    if (counter > 0) {
    dreheZahl(counter);
    } else {
    neueZahl = Integer.parseInt(neu);
    }
    return neueZahl;
    }
    }

    "He, who trades freedom for temporary security, deserves neither freedom nor security."
    ("Jene, die Freiheit aufgeben, um eine vorübergehende Sicherheit zu erwerben, verdienen weder Freiheit noch Sicherheit.") --- Benjamin Franklin

    Einmal editiert, zuletzt von tesro70 (7. Dezember 2011 um 00:49)

  • @ tesro70

    hast natürlich Recht. Hatte irgendwie nur im Kopf das er im dritten Beitrag selber String benutzt hat.

    Ich glaube die ganze Aufgabe ist etwas blöd formuliert. Sinn voll müssen solche Aufgaben eh nicht sein, kann mich da noch gut dran erinnern.....

    Wenn es schnell und speicherschonend sein soll dann bitte in ANSI C :p ;)


    Wie währe es hiermit:

    public class Invertieren {
    public static int DreheZahl( int zahl) {
    int rest = 0;
    int DreheZahl = 0;

    //System.out.println(zahl); // 1234

    for (int i = 0; zahl > 0; i++) {
    rest = zahl %10;
    //System.out.println(rest); //4
    zahl = zahl / 10;
    //System.out.println(zahl); //123
    DreheZahl = DreheZahl * 10 + rest;
    System.out.print(rest); //4
    }

    }
    }


    Main:

    public class InvertierenTest {

    public static void main(String[] args) {
    Invertieren.DreheZahl(12345);

    }

    }

    Edit: Grad noch in meinem wust alter Codeschnipsel gefunden (allerdings in C )


    #include<stdio.h> 
    int main(){ 
    int num,rev; 
    printf("\nEnter a number :"); 
    scanf("%d",&num); 
    rev=reverse(num); 
    printf("\nAfter reverse the number is :%d",rev); 
    return 0; 

    int sum=0,r; 
    reverse(int num){ 
    if(num){ 
    r=num%10; 
    sum=sum*10+r; 
    reverse(num/10); 

    else
    return sum; 
    return sum; }

    4 Mal editiert, zuletzt von Nysrogh (8. Dezember 2011 um 16:31)