Position einer Ziffer in einer Zahlenkette

r0bc94

Mitglied
Hallo,

zur Zeit sitze ich an folgender Aaufgabe und weiss nicht mehr weiter:
Schreiben Sie eine Methode gibPosition(int zahl, int ziffer) welche die Position einer Ziffer in einer Zahl liefert. Zählweise beginnt hinten mit 1. Kommt die Ziffer nicht vor so soll eine 0 ausgegeben werden.
Bsp.: Zahl: 1337, Ziffer: 1 --> 4; Zahl: 1337, Ziffer 2 --> 0.

Das einzige worauf ich komme ist das hier:
Java:
public static int gibPosition(int zahl, int ziffer) {
        return (zahl % 10 == ziffer)
                ? (1)
                : (zahl / 10 > 0)
                    ? (1 + gibPosition(zahl / 10, ziffer))
                    : (0);
    }

Leider scheitert dies an der 0, da ich ja immer mit 1+ eine 1 addiere. Irgendwie komme ich hier nicht so recht weiter. Gibt es villeicht eine möglichkeit java zu zwingen, im unterstem Baum eine 0 auszugeben ?
 
Diese Schreibweise einer Methode ist schon sehr optimiert und schwer zu warten. Du solltest, gerade in der Anfangszeit nicht solchen Code schreiben ( ?: ist sowieso zu vermeiden 😉 ), sondern lieber Längeren, dafür Einfacheren.

Eine sehr einfache Möglichkeit ist das Ganze in einen String umzuwandeln und mit String#lastIndexOf(String) nachzuprüfen, wo die Ziffer ist und diesen Wert zurückzugeben.
 
Diese Schreibweise einer Methode ist schon sehr optimiert und schwer zu warten. Du solltest, gerade in der Anfangszeit nicht solchen Code schreiben ( ?: ist sowieso zu vermeiden 😉 ), sondern lieber Längeren, dafür Einfacheren.

Eine sehr einfache Möglichkeit ist das Ganze in einen String umzuwandeln und mit String#lastIndexOf(String) nachzuprüfen, wo die Ziffer ist und diesen Wert zurückzugeben.

Hi, vielen dank für die Antwort 🙂

Ich hatte vergessen zu erwähnen, dass wir zur lösung ausschließlich Rekursion und Bedingte Ausdrücke werwenden dürfen.
 
Zuletzt bearbeitet:
Ok. Das macht das Ganze schon wieder schwieriger. Dann solltest du trotzdem if-Bedingungen verwenden. Die sind einfacher zu lesen.
 
Zuletzt bearbeitet:
Leider dürfen wir dies auch nicht :/.

Ich habe aber eine mehr oder weniger Komplexere Lösung gefunden:

Zunächst schaut man (einfach), ob die Zahl von welcher die Position bestimmt werden soll überhaupt in der Zahl vorkommt. Dies kann man folgendermaßen tun:
Java:
public static boolean enthaelt(long zahl, int ziffer) {
        return (ziffer == zahl % 10) 
               ? (true) 
               : ((zahl / 10 == 0)
                    ? (false)
                    : ((enthaelt(zahl / 10, ziffer)) 
                        ? (true)
                        : (false)));
    }
Nun kann man mit hilfe dieser Methode eine Zahl, welche die Ziffer nicht enthält "abfangen":
Java:
public static int gibPosition(int zahl, int ziffer) {
        return (enthaelt(zahl, ziffer))
                ? (zahl / 10 > 0)
                     ? (1 + gibPosition(zahl / 10, ziffer))
                     : (1)
                : (0);
                
                
    }
Nur frage ich mich immernoch, ob es da nicht einen einfacheren Weg nur über eine Methode gibt.
 
Zuletzt bearbeitet:
Den gibt es:
Java:
private int ziffernTest(int zahl, int ziffer) {
	return (zahl == 0) ? 0 :
		(zahl%10 == ziffer) ? 1:
			ziffernTest(zahl / 10, ziffer) == 0 ? 0 :
				ziffernTest(zahl / 10, ziffer) + 1;
}

Ich lasse den zu Übungszwecken erstmal so stehen. Wenn du noch fragen hast, kann ich ihn aber gerne erklären.
 

Zurück
Oben