Java Eine eingelesene Zahl rückwärts wieder ausgeben

king0r

Lt. Junior Grade
Registriert
Juli 2009
Beiträge
485
erledigt

Hallo,

gibt es in Java einen einfachen Befehl, der eine eingelesen Zahl (von der Kommandozeile) einfach wieder rückwärts ausgibt?

Z.B. die Zahl 54543 wird eingegeben und das Programm soll 34545 wieder ausgeben.

Danke schon mal.

Gruss
 
Zuletzt bearbeitet:
Das geht eigentlich ganz simpel (zwar nicht als Zahl aber im Grunde ists ja dasselbe, denn ne Zahl kann man ja auch in nen String umwandeln und umgekehrt):
Code:
try {
	BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
	System.out.print("Eingabe: ");
	System.out.println(new StringBuilder(in.readLine()).reverse().toString());
} catch (IOException e) {}
 
Hy,

das funktioniert so net wirklich oder muss ich noch was extriges beachten?
Ergänzung ()

Das spuckt der Compiler aus:

symbol : class InputStreamReader
location: class NumberPalindrome1
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
^

Ich glaube aber sowieso nicht, dass Java Zahlen einfach so umdrehen kann.
Zudem wäre es interessant, es selbst hinzubekommen, ohne auf eine vorgefertigte Klasse zuzugreifen.
 
@nekro1: ähhh also bei mir geht das nicht ohne try/catch...
public String readLine() throws IOException

@king0r: Natürlich funktioniert das. Du hast doch sicher schon mal mit Java gearbeitet und dann solltest du wissen, dass du noch imports brauchst:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

Ich glaube aber sowieso nicht, dass Java Zahlen einfach so umdrehen kann.
Zudem wäre es interessant, es selbst hinzubekommen, ohne auf eine vorgefertigte Klasse zuzugreifen.
Naja das musst du schon gleich sagen. Du hattest nach der einfachsten Möglichkeit gesucht und das ist eben Obiges. Natürlich kann mans auch manuell machen aber eigtl. braucht man das Rad ja nicht neu erfinden. Ich hatte nur Standard-Javaklassen verwendet. Java ist auch eigentlich dafür gedacht, dass man diese nutzt und möglichst wenig auf primitive Datentypen zurückgreift.
Aber wenn dus so willst hier mal mit fester Zahl und Handarbeit:
Code:
int Zahl = 345678;
String str = String.valueOf(Zahl);         // Integer in String konvertieren
char[] charArray = str.toCharArray();
int n = charArray.length - 1;
for (int j = (n-1) / 2; j >= 0; --j) {
    char temp = charArray[j];
    charArray[j] = charArray[n - j];
    charArray[n - j] = temp;
}
int i = 0;
try{
	i = Integer.parseInt(new String(charArray));       // CharArray nach String und dann in Integer konvertieren
} catch (NumberFormatException e){}
System.out.println(i);
 
Zuletzt bearbeitet:
Danke dir,

Programm läuft jetzt soweit. Immer wieder gut auf erfahrene Programmierer zurückgreifen zu können ;-)
 
Solltest du wissen, dass es ein positiver Integer ist, so kannst du auch mit ganzzahliger Division und Rest arbeiten.

Quasi letzte Stelle abknippsen (rest von mod 10), durch 10 teilen, dann in Schleife neue Zahl mal 10, dazuaddieren, wieder abknippsen etc. bis Zahl alle

(noch ein paar Spezialfälle abfangen und fertig)


Die oben schon genannte Lösung ist aber viel besser :)
 
Was zum einlesen auch immer schick ist, ist in der aktuellen Java version die Scanner klasse im package util.

Code:
import java.util.*;

class bla{
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        String s = scanner.nextLine();
        System.out.println(s);
        for(int i = 0; i < s.length; i++){
            System.out.print(s[length-i]);
        }
        System.out.println();
    }
}

Hoffe mal hab mich nicht vertippt. mit der klasse lassen sich dann auch noch noch die anderen datentypen "einlesen".

Gruß
 
Zuletzt bearbeitet:
Hy,

also die Variante mit mod10 (%10) gefällt mir am besten. Allerdings weiss ich leider nicht wie ich
1. die while Schleife (while number .... ??) dafür gestalte, also welche Bedingung ich benötige
2. wie ich dann die einzelnen Ergebnisse aus der Mod Divison als ganze Integer - Zahl wieder weiter verarbeiten kann

Vllt. kann mir ja jemand nochmal explizit für das Problem der mod10 Divison helfen.

Danke!
Ergänzung ()

So, habe es jetzt soweit lösen können:

Code:
{
 	 
	public static void main(String[] args) 
	{

		
	int rest = 0;
    int umkehr = 0;
	int zahl = Integer.parseInt(args[0]);

    for (int i = 0; zahl > 0 ; i++)
    {
        rest = zahl % 10;
        zahl = zahl / 10;
        umkehr = umkehr * 10 + rest; 
		System.out.print(rest);
	}
	 boolean palindromeTrue = (zahl == rest);
	 
	 if (palindromeTrue == true)
	 {
	 System.out.print("Die Zahl " + zahl + " ist ein Palindrom");
	 }
		else
		{
		 System.out.print("Die Zahl " + Integer.parseInt(args[0]) + " ist kein Palindrom");
		}
  }
}


aber:


Ich habe nach wie vor das Problem, dass ich ja mit den Teilern nacher noch nen Abgleich rest mit zahl machen muss. Nur wie speicher ich daweil die Inhalte der Ausgaben von teiler in java als Zahl?

Also gemeint ist das hier:
boolean palindromeTrue = (zahl == rest);

Hierbei soll er aber den kompletten rest und nicht nur die letzte Ausgabe (was ja 0 ist) abgleichen.
 
Zuletzt bearbeitet:
Code:
int zahl = Integer.parseInt(args[0]);
int tmp = zahl, erg = 0;
while (tmp > 0){
	erg = (erg * 10) + (tmp % 10);
	tmp = tmp/10;
}
if (zahl == erg) System.out.print("Die Zahl " + zahl + " ist ein Palindrom");
else System.out.print("Die Zahl " + zahl + " ist kein Palindrom");
(negative Zahlen müssen noch abgefangen werden!)
 
BerniG schrieb:
Code:
int zahl = Integer.parseInt(args[0]);
int tmp = zahl, erg = 0;
while (tmp > 0){
	erg = (erg * 10) + (tmp % 10);
	tmp = tmp/10;
}
if (zahl == erg) System.out.print("Die Zahl " + zahl + " ist ein Palindrom");
else System.out.print("Die Zahl " + zahl + " ist kein Palindrom");
(negative Zahlen müssen noch abgefangen werden!)

Wieso einfach, wenns auch kompliziert geht. :evillol:

Menno, wieso steh ich nur so aufn Schlauch.

Finde es aber immer wieder lustig, wieviel Codezeilen man auf einen Schlag wegrationalisieren kann.

Ein dickes, fettes Danke von mir! ;)
 
Zurück
Oben