[Java] Eingegebene Zahl gespiegelt ausgeben.

kalleberlin

Lieutenant
Registriert
Feb. 2005
Beiträge
853
Hallo :)

Ich bins mal wieder. Ich bin jetzt bei einer Lektion angekommen wo ich eine beliebig eingegebene Zahl gespiegelt ausgeben soll.

Ich sitz da seit gestern dran und ich hab wirklich das gesamte Internet nach einer Lösung abgegrasst, aber leider nichts gefunden :(.

Nach vielen Stunden testen, schreien etc hab ich es jetzt hinbekommen das 3 eingegebene Zahlen gespiegelt ausgegeben werden. Da das ja nur teilweise richtig ist wollte ich euch fragen ob ihr mir erkären könntet wie genau ich das angehen sollte / muss.

Hier mal meine jetzige "Lösung" :

PHP:
import java.util.Scanner;

public class spiegel{
	static String mirror (String spiegelzahl){
		char[] anzahlzahlen  = spiegelzahl.toCharArray();
		char   last  = anzahlzahlen[ anzahlzahlen.length - 1 ];
		char   last2  = anzahlzahlen[ anzahlzahlen.length - 2 ];
		char   last3  = anzahlzahlen[ anzahlzahlen.length - 3 ];
		System.out.print("Gespiegelte Zahl: "+last +last2 +last3);
		return (spiegelzahl);
	};
	
	
	public static void main( String[] args ){
		String spiegelzahl ="";
		Scanner ScIn = new Scanner (System.in); //EingabeScanner erzeugen
		System.out.print("Bitte geben sie eine Ganze Zahl ein: ");  //text wirdausgegeben
		spiegelzahl = ScIn.next();  //Zu spiegelnde Zahl wird als String eingelesen
		mirror(spiegelzahl);
	}
}

Falls euch bei dieser Lösung die Haare zu berge stehen sollten, vergesst bitte nicht das ich absolut blutiger Anfänger bin ;) (sieht man bestimmt auch^^)


Jeder der mich hier in die richtige Richtung schubst, dem bin ich sehr dankbar :)

//edit:

Falls jemand von euch eine Lösung postet, wäre es nett wenn der- oder diejenige das ganze auch kurz erklären könnte :)
 
Zuletzt bearbeitet:
Hier mal ein kleiner Schubser: Lies dir mal das Kapitel über Schleifen (for-, while-Schleife) durch und überdenk dann nochmal deine "mirror-Methode". Du kannst indem du das ganze per Schleife löst, sehr elegant und kurz machen. Also du kannst per Schleife das char-Array rückwärts durchlaufen und dabei einfach ausgeben.

Wenn du einen größeren Anstoss brauchst, sag Bescheid. Ich glaube aber nicht, dass es dir viel bringt, wenn dir jemand die komplette Lösung hinschreibt. Deshalb nur ein kleiner Denkanstoss. ;-)
 
Zuletzt bearbeitet:
Ich hab schon in Erwägung gezogen das mit einer for-Schleife zu realisieren.

Allerdings bilden sich dabei in meinem Kopf regelmäßig Gordische Knoten, von daher wäre es nett wenn Du mich ganz brutal schubsen könntest :).
 
Ich glaube aber nicht, dass es dir viel bringt, wenn dir jemand die komplette Lösung hinschreibt. D

Manchmal macht's erst klick, wenn man die Lösung vor sich hat ;)

PHP:
import java.util.Scanner;

public class spiegel{ 
    static void mirror (String spiegelzahl)
    {
        char[] anzahlzahlen  = spiegelzahl.toCharArray();
        System.out.print("Gespiegelte Zahl: ");
        for(int i = anzahlzahlen.length-1; i>=0; i--)
            System.out.print(anzahlzahlen[i]);
        System.out.print("\n");
        
    }
    
    
    public static void main( String[] args )
    {
        String spiegelzahl ="";
        Scanner ScIn = new Scanner (System.in); //EingabeScanner erzeugen
        System.out.print("Bitte geben sie eine Ganze Zahl ein: ");  //text wirdausgegeben
        spiegelzahl = ScIn.next();  //Zu spiegelnde Zahl wird als String eingelesen
        mirror(spiegelzahl);
    }
}
 
Zuletzt bearbeitet:
Wenn ich jetzt eingebe "1234" gibt er mir :

Gespiegelte Zahl: 432432

aus.

Warum das?


//edit
Und noch eine Frage:

Du hast aus dem
PHP:
static String mirror (String spiegelzahl)

ein:

PHP:
static void mirror (String spiegelzahl)

gemacht.

Ich dachte Methoden die was Rückgeben sollen, dürfen nicht "void" sein. Ich seh zwar das Du das "return" weg gemacht hast, aber warum das so ist, erschliesst sich mir noch nicht ganz.
 
Zuletzt bearbeitet:
Du kannst mit einer for-Schleife einfach rückwärts über die Zeichenkette iterieren:
Code:
String gespiegelt = "";
for (int i = anzahlzahlen.length - 1; i >= 0; --i) {
    gespiegelt = gespiegelt + anzahlzahlen[i];
}

Die for-Schleife initialisert am Anfang den Zähler i mit dem letzten Index von anzahlzahlen und fügt dann dem String gespiegelt das i-te Zeichen hinzu, solange i größer oder gleich 0 ist, nach jedem Durchlauf wird i um 1 dekrementiert.

(hach, bin ich langsam...)

greetings, Keita
 

Anhänge

  • 2007-04-22_195327.png
    2007-04-22_195327.png
    3,9 KB · Aufrufe: 310
ah, das Ergebnis ist korrekt, hab die falsche java datei gestartet :).
 
Ich dachte Methoden die was Rückgeben sollen, dürfen nicht "void" sein. Ich seh zwar das Du das "return" weg gemacht hast, aber warum das so ist, erschliesst sich mir noch nicht ganz.

Ja, ich hatte auf die schnelle keine Lust noch den String zu konkatenieren ;) Außerdem seh ich nicht wirklich nen Sinn noch den String überhaupt zurück zu geben. Er wird ja eigentlich nicht mehr gebraucht
 
Ich meine mich zu erinnern dass die Klasse string oder stringbuffer eine Methode reverse() mitbringt ;)
Das hilft dir zwar nicht Programmieren zu lernen,
aber Java ist nunmal so: Man muss nicht alles können, man muss nur wissen wo es steht.
Und: Man sollte das Rad nicht neu erfinden!


Deswegen gilt besonders für Java der Grundsatz: Such nach fertigen Lösungen :)
 
StringBuffer hat die Methode reverse(), in String wäre sie etwas deplatziert. ;)
Natürlich könnte man sich einfach dieser Methode bedienen, aber wie du ja selbst schreibst, lernt man dadurch nicht das Programmieren, sondern allenfalls das Coden, und das ist ja auf die Dauer ein bißchen öde.

greetings, Keita
 
Ja, in Java gibts für alles ne Klasse, was länger ist als 10 Zeilen, kann ich nur bestätigen ;)
 
Danke für eure hilfe :)

musste eben nochmal weg, deswegen so spät die Antwort ;).

Und nachdem ich mir die schleife nochmal angeschaut habe, hab ichs auch verstanden (denke ich jedenfalls :D)


Ihr hört bestimmt bald wieder von mir :D
 

Ähnliche Themen

Zurück
Oben