Abbruchbedingung

Neue Frage »

Auf diesen Beitrag antworten »
Ratte Abbruchbedingung

Hat jemand vielleicht eine Idee für die return statement und die Abbruchbedingung bei folgender Aufgabe? Ich zerbreche mir schon seit einer ganzen Zeit den Kopf darüber... verwirrt
 
Auf diesen Beitrag antworten »
eulerscheZahl

Im Beispiel hast du ein Wort ungerader Länge. Du wirst irgendwann Position 3 mit Position 3 vergleichen (der Ausgang des Vergleichs ist klar). Danach vergleichst du nur noch Ziffer, die du schon verglichen hast.
Wie sieht es bei gerader Ziffernzahl aus?
Auf diesen Beitrag antworten »
Ratte

Hallo eulersche Zahl,

irgendwie kann ich dir nicht folgen unglücklich
In welchem beispiel? Ungerader länge? Hättest du bitte die güte mir das per quellcode näher zu bringen?
Auf diesen Beitrag antworten »
eulerscheZahl

Ich nehme Bezug auf das Beispiel, das du in deinem Bild angehängt hast.
 
Auf diesen Beitrag antworten »
Ratte

Bei geraden ziffernzahln weiß ich es nicht. Zumindest fällt mir spontan kein mathematischer ausdruck dafür ein um den vergleich zu beschreiben. verwirrt
Auf diesen Beitrag antworten »
eulerscheZahl

Ich habe mal ein wenig rumgespielt.
Edit: das eine Bild musst du anklicken, damit sich was bewegt.
Auf diesen Beitrag antworten »
Ratte

Danke für das attachment. Leider weiß ich trotzdessen nicht wie ich das in "quellcode" schreibe unglücklich
Auf diesen Beitrag antworten »
eulerscheZahl

Rekursiver Aufruf: erhöhe left, verringere right
Abbruch: left >= right
Auf diesen Beitrag antworten »
Ratte

Zitat:
Original von eulerscheZahl
Rekursiver Aufruf: erhöhe left, verringere right
Abbruch: left >= right


Vielen dank! smile

Also mit (zahl\10^position)%10

Kann ich von rechts nach links gehen. Aber wie bewege ich nun die position von links nach rechts?
Auf diesen Beitrag antworten »
eulerscheZahl

Mit (zahl\10^position)%10 bekommst du eine einzelne Ziffer.
Um die Ziffer rechts daneben zu bekommen, musst du position um eins verringern, nach links musst du position erhöhen.
Auf diesen Beitrag antworten »
Ratte

etwa so?

also für right = (zahl\10^(position+1))%10
udn für left = ( zahl\10^(position-1))%10
Auf diesen Beitrag antworten »
eulerscheZahl

Nach Aufgabenstellung hast du die Variable position gar nicht, dafür aber right und left. Diese kannst du in die Formel gleich für position einsetzen.
Auf diesen Beitrag antworten »
Ratte

ist das so richtig?

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
public static boolean isPalindrom1(int number, int left, int right){

if (left >= right) {
return isPalindrom1(( zahl\(10^right))%10)
else
return isPalindrom1(( zahl\(10^left))%10)


	} 
 

}
Auf diesen Beitrag antworten »
eulerscheZahl

Nein.
^ macht in Java XOR.
Und du gibst nirgendwo true oder false zurück. Außerdem musst du in jedem Druchlauf 2 Ziffern miteinander vergleichen.

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
public class Main {

	public static void main(String[] args) {
		System.out.println(isPalindrom(1234321, 0, 6));
		System.out.println(isPalindrom(12344321, 0, 7));
		System.out.println(isPalindrom(12345321, 0, 7));
	}

	static int getDigit(int number, int position) {
		int factor = 1;
		for (int i = 0; i < position; i++) {
			factor *= 10;
		}
		return (number / factor) % 10;
	}

	static boolean isPalindrom(int number, int left, int right) {
		if (left >= right)
			return true;
		if (getDigit(number, left) != getDigit(number, right))
			return false;
		return isPalindrom(number, left + 1, right - 1);
	}
}
 
Neue Frage »
Antworten »


Verwandte Themen