# Welche möglichkeiten gibt es eine Zahl zu spiegeln?



## Sabrina88 (25. Nov 2009)

Guten Abend ihr lieben,

kennt jemand einen Algorithmus, mit dem es möglich ist eine Zahl zu spiegeln?
Beispiel: aus 123 wird 321

DIe einfachste Methode läuft sicherlich über Arrays. Aber gibt es noch andere Methoden? (per schleife)
Auf die einzelnen Felder der zahl Zahl_ darf ich nicht zugreifen. Also muss ich die Zahl irgendwie in ihre Einzelteile aufspalten. Aber wie?

lG Sabrina_


----------



## Ark (25. Nov 2009)

So oft, wie Probleme wie diese kommen, muss man schon darüber nachdenken, die Zusammenhänge zwischen den magisch anmutenden Verwendungen von DIV-MOD und MUL-ADD in einem FAQ-Beitrag zu erklären. Ach, ja, der Logarithmus darf dazu ja auch nicht fehlen.  Und die schnelleren Varianten für die Fälle, in denen Zweierpotenzen zum Einsatz kommen. Hat jemand Lust? 

Ark


----------



## SlaterB (25. Nov 2009)

@Ark 
trägt dein Posting irgendwie zum Thema bei?
gerade mit der ersten Antwort sollte man sehr vorsichtig sein, da dann ein Thema aus der Liste der unbeantworteten Themen herausfällt


-----
als String kann man auch einigermaßen drehen, ist aber letztlich intern auch ein Array,

Java String Reverse Example | Java Examples - Java Program Sample Source Code


----------



## eRaaaa (25. Nov 2009)

```
while(zahl!=0){
			int tmp = zahl % 10;
			zahl /= 10;
			System.out.print(tmp);
		}
```


----------



## Ark (25. Nov 2009)

SlaterB hat gesagt.:


> @Ark
> trägt dein Posting irgendwie zum Thema bei?
> gerade mit der ersten Antwort sollte man sehr vorsichtig sein, da dann ein Thema aus der Liste der unbeantworteten Themen herausfällt


Oh, das habe ich nicht bedacht; ich verwende die dazugehörige Funktionalität nicht, deshalb kriege ich so etwas leider nicht mit.  Man verzeihe mir bitte.

Ark


----------



## Sabrina88 (26. Nov 2009)

Hey schonmal vielen Dank =)
jetzt muss ich nur noch herausfinden wie ich die zahlen in richtiger richtung aufsplitte. kann ich dafür diesen codeschnipsel einfach in eine for-schleife einbinden? Oder gibt es eine einfachere Methode?

gute nacht,
lG Sabrina


----------



## javimka (26. Nov 2009)

oder so:
lhaz = Integer.parseInt(new StringBuffer(String.valueOf(zahl)).reverse);

nicht perfekt aber praktisch


----------



## bygones (26. Nov 2009)

javimka hat gesagt.:


> oder so:
> lhaz = Integer.parseInt(new StringBuffer(String.valueOf(zahl)).reverse);
> 
> nicht perfekt aber praktisch



reverse() ;-)


----------



## faetzminator (26. Nov 2009)

Sabrina88 hat gesagt.:


> Hey schonmal vielen Dank =)
> jetzt muss ich nur noch herausfinden wie ich die zahlen in richtiger richtung aufsplitte. kann ich dafür diesen codeschnipsel einfach in eine for-schleife einbinden? Oder gibt es eine einfachere Methode?
> 
> gute nacht,
> lG Sabrina




```
String irgendeineEingabeDesBenutzers = "45212";
// ...
int zahl = Integer.parseInt(irgendeineEingabeDesBenutzers);
```


----------



## Sabrina88 (26. Nov 2009)

hey, so meinte ich das eigentlich nicht.
Ich eollte die einzelnen Ziffern der Zahl haben.Wenn ich z.b 234 eingebe soll er mir zurückgeben:
2
3
4
das funktioniert doch irgendwie über eine schleife, oder?

lG Sabrina


----------



## eRaaaa (26. Nov 2009)

meinst du nicht eher
4
3
2

? 

das wäre dann genau mein oben geposteter code, nur anstatt print, nimmste println 

/edit: wenn du das nicht meinst, dann vollt so:

```
int zahl = 234;
		String zahlStr = String.valueOf(zahl);
		for (int i = 0; i < zahlStr.length(); i++) {
			System.out.println(zahlStr.charAt(i));
		}
```


----------



## SlaterB (26. Nov 2009)

@Sabrina88
wie kann man das fälschlicherweise als


> [..] mit dem es möglich ist eine Zahl zu spiegeln?
> Beispiel: aus 123 wird 321
> [..]


ausdrücken, das passt doch überhaupt nicht zu deiner neuen Anforderung,
na ganz egal

aus der Zahl einen String machen und den dann aufsplitten, z.B. toCharArray(), die chars noch in Zahlen umrechnen,
'1' != 1

oder wieder das Rechnen, %10, /10, liefert nur leider jetzt die falsche Reihenfolge,
dennoch Ziffern aufsammeln und später Reihenfolge umdrehen,


----------



## KrokoDiehl (26. Nov 2009)

Mit der Methode 
	
	
	
	





```
String.toCharArray()
```
 bekommst du ein Array mit den Ziffern. Vorrausgesetzt der String hat nur Ziffern


----------



## Sabrina88 (26. Nov 2009)

hey, ich suche ja eine lösung ohne arrays.
Vlt einmal etwas zu meinem Programm: Ich möchte ein Programm erstellen, welches prüft, ob die erste ziffer einer zahl mit der letzen ziffer, die zweite ziffer mit der vorletzten ziffer.....übereinstimmt.

also soll mir das programm bei 212 z.b zurückgeben, dass die erste und letzte ziffer übereinstimmt.

P.s. nun ist mir der name eingefallen wie sich das ganze nennt.
Ich möchte ein Programm erstelen, welches eine Zahl auf die eigenschaft eines Palindroms überprüft.


----------



## SlaterB (26. Nov 2009)

gibt es einen Grund, warum das ohne Arrays sein soll?
natürlich kann man sich jetzt irgendwas verrücktes ausdenken, aber warum

wichtig wäre auf jeden Fall, die Anzahl Stellen der Zahl auszurechnen: z.B. Logarithmus,
oder was nettes rekursives basteln 

```
check(zahl,stellen,factor) {
  if (zahl < factor) {
    check(zahl, stellen+1, factor*10)
  }
}
```


----------



## Sabrina88 (26. Nov 2009)

Ja den Grund gibt es leider  
Arrays haben wir in der Vorlesung noch nicht gehabt und was wir noch nicht gehabt haben dürfen wir auch noch nicht benutzen 
Wie ich die zahl nun von hinten in ihre elemente aufteile weiß ich ja nun, für die dezimalstellen hab ich mir eine kleine Funktion gebastelt:

```
static int dezStellen(int zahl){
		int dezimalStellen=0;
		while(zahl>=10 ){	
        	zahl/=10;
        	dezimalStellen++;
        	}
		return 0;
	}
```

meine erste idee war, dass eine Hilfsvariable( String)nimmt und die Zahlen die man von hinten abgetrennt hat jeweils an den String anfügt, ihn hinterher in ein int umwandeln und diesen wert mit der orginalzahl vergleicht. Aber uns wurde gleich gesagt das dies nicht der verlange Lösungsweg sei =(
also muss das ganze irgendwie über schleifen gehen.ich weiß nur noch nicht wie


----------



## SlaterB (26. Nov 2009)

von der stellenzahl nimmst du die Hälfte, evtl. aufrunden,
darüber eine Schleife,
und dann zwei zusammengehörige Stellen finden

Beispiel
459058094,
9 Stellen,
Schleife bis 5
1 und 9 vergleichen
2 und 8 usw

nun noch zu den gegebenen Stellen die jeweilige Ziffer herausfinden, am besten in einer Untermethode,
das geht auch wieder mit Schleifen und /10, %10, da bastel mal dran

die gefundenen Ziffern vergleichen

1 und 9 vergleichen -> 4 und 4, ok
2 und 8 vergleichen -> 5 und 9, falsch, kein Palindrom


----------



## Sabrina88 (26. Nov 2009)

alles klar  ich habs rausgefunden. Vielen Dank. Die Funktion durchläuft zwar alle Ziffern (nicht nur dezStellen/2) aber ich denke mal das ist bei einem Anfänger noch irrelevant. Hauptsache es funktioniert 

lG Sabrina


----------

