ziffer in zahl erkennen mit boolean

moccajoghurt

Bekanntes Mitglied
Verfolge immernoch den Java-Kurs und bin nun bei einer Aufgabe, bei der mir kein effizienter Lösungsweg einfällt... Aufgabe:

(5) eine Funktion, die als Parameter einen int-Wert übergeben bekommt und die überprüft, ob die Ziffer 7 in dem int-Wert vorkommt (Beispiel: f(-2578) == true)

Wie kann ich das am sinnvollsten umsetzen. Wichtig dabei ist: in der Funktion dürfen nur die Anweisungen for, do, while, if, break, continue verwendet werden - andere Befehle sind nicht vorgesehen.

Mir fallen nur sehr lange umständliche Lösungswege ein, was bei der Aufgabe vermutlich nicht sein muss.
 
Was für Lösungswege fallen dir denn ein?
Mir fällt spontan ein Lösungsweg mit einer Schleife und ein paar String funktionen ein.
 
Java:
public static boolean f(int value) {
    if (value < 0) {
        value *= -1;
    }
    while (value > 0) {
        if (value % 10 == 7) {
            return true;
        }
        value /= 10;
    }
    return false;
}
Ich würde es so machen.
Warum zuerst in eine positive Zahl kehren, falls sie negativ ist? Modulo ([c]%[/c]) funktioniert nicht bei negativen Zahlen.
 
bei mir sähe die Funktion ungefähr so aus, nur sehr viel länger, weil ich hier nur die letzten 2 ziffern überprüfe... das kommt mir sehr umständlich vor.
Java:
	static boolean sieben(int zahl) {
		int zaehler = 0;
		int zaehler2 = 0;
		for (int x = zahl; x % 10 !=0; x--) {
			zaehler++;
		}
		for (int x = zahl - zaehler; x % 100 != 0; x--) {
			zaehler2++;
		}
		if (zaehler == 7) {
			return true;
		}
		if (zaehler2 == 7) {
			return true;
		} else return false;
	}
 
Java:
public static boolean f(int value) {
    if (value < 0) {
        value *= -1;
    }
    while (value > 0) {
        if (value % 10 == 7) {
            return true;
        }
        value /= 10;
    }
    return false;
}
Ich würde es so machen.
Warum zuerst in eine positive Zahl kehren, falls sie negativ ist? Modulo ([c]%[/c]) funktioniert nicht bei negativen Zahlen.
Mist, warum komm ich nicht selbst auf solche Ideen 🙁

Danke 🙂
 
Solange du sie dir nicht nur abguckst, sondern auch verstehst, ist das kein Problem - dann weisst du jetzt etwas mehr 😉
Die Schleifen bei dir sind mir schon etwas suspekt 😀 Da würde allerdings mit negativen Zahlen das gleiche passieren, also [c]-25678[/c] oder was auch immer würde [c]false[/c] liefern.
 
Java:
public static boolean f(int value) {
    if (value < 0) {
        value *= -1;
    }
    while (value > 0) {
        if (value % 10 == 7) {
            return true;
        }
        value /= 10;
    }
    return false;
}
Ich würde es so machen.
Warum zuerst in eine positive Zahl kehren, falls sie negativ ist? Modulo ([c]%[/c]) funktioniert nicht bei negativen Zahlen.

Muss das nicht while (value > 1) sein? weil 0 wird das doch nicht, wenn du immer durch 10 teilst ???:L
 
Es wird immer eine Stelle weggenommen...
Code:
-2578 -> 2578

2578 % 10 -> 8
2578 / 10 -> 257

257 % 10 -> 7
TRUE
bzw.
Code:
-2568 -> 2568

2568 % 10 -> 8
2568 / 10 -> 256

256 % 10 -> 6
256 / 10 -> 25

25 % 10 -> 5
25 / 10 -> 2

2 % 10 -> 2
2 / 10 -> 0

0 == 0
FALSE
ich weiss nicht, warum das nicht [c]0[/c] geben sollte. Praktisch gesehen kann man natürlich auch [c]>= 7[/c] schreiben, macht aber im Kontext weniger Sinn...

@Marco13: Danke für die rekursive Lösung 😀
 

Zurück
Oben