Integer oder Strings spiegeln (in while loop)

Evilplankton

Mitglied
Hallo an alle🙂

Ich habe ein kleines Problem mit einem Programm, mit dem man Dezimalzahlen in jedes beliebige andere Zahlensystem umwandeln kann. Der Algorithmus an sich läuft wunderbar, nur leider gibt der Rechner natürlich (nach dem Horner-Schema) die Ausgangszahlen verkehrt herum aus. Die Funktion new StringBuffer(strOriginal).reverse().toString(); funktioniert nicht. Jetzt habe ich es mit "rückwärts zählen" versucht, aber das hat auch keinen Effekt.

Java:
import javax.swing.JOptionPane;

public class Dec_converter {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		String xS = JOptionPane.showInputDialog("Bitte geben Sie eine ganze Zahl ein: "),
			nS = JOptionPane.showInputDialog("Bitte geben Sie eine Basiszahl ein: ");
		
		int x = Integer.parseInt(xS), n = Integer.parseInt(nS), y = 0, z = 0;

do{
	y=x/n;
	z=x%n;
	x=y;
	String s = String.valueOf(z);
	for(int i=s.length()-1;i>=0;i--)
		System.out.print(s.charAt(i));
		}
while(x>0);

}



	}

Für jede Hilfe bin ich dankbar, es reichen auch nur ein paar Anhaltspunkte🙂
 
Warum funktioniert

Java:
    public static void main(String[] args)
    {
        String s1 = "0101";
        String s2 = new StringBuilder(s1).reverse().toString();
        System.out.println(s2);
    }

nicht?

edit: Mit "Rückwärtszählen" (besser auch einen StringBuilder eig. verwenden)

Java:
        String s1 = "0101";
        String s2 = "";
        for(int i = s1.length() - 1; i >= 0; i--)
        {
            s2 += s1.charAt(i);
        }
        System.out.println(s2);
 
Zuletzt bearbeitet:
Ja, das hatte ich schon probiert. Aber es scheint das die while-Schleife da Probleme macht. Dein Beispiel hat funktioniert, aber in meinem Code....

Java:
import javax.swing.JOptionPane;

public class Dec_converter {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		String xS = JOptionPane.showInputDialog("Bitte geben Sie eine ganze Zahl ein: "),
			nS = JOptionPane.showInputDialog("Bitte geben Sie eine Basiszahl ein: ");
		
		int x = Integer.parseInt(xS), n = Integer.parseInt(nS), y = 0, z = 0;

do{
	y=x/n;
	z=x%n;
	x=y;
	String s1 = String.valueOf(z);
	String s2 = new StringBuilder(s1).reverse().toString();
    JOptionPane.showMessageDialog(null, "Die konvertierte Zahl lautet: "+s2);
		}
while(x>0);

}



	}

...wird die berechnete Zahl trotzdem "rückwärts" ausgegeben.
Aber jetzt mit JOption-Ausgabe sehe ich, dass das Ergebnis irgendwie außerhalb der Schleife ausgegeben werden muss, sonst gibt es alle einzelnen Stellen der Zahl in jeweils einem Dialogfenster:autsch:
Muss nochmal nachschauen...
 
Ja stimmt... Aber warum gibt er mir dann immer nur die erste/letzte Zahl aus, sobald die Ausgabe außerhalb der Schleife steht?? Normalerweise ist z doch schon solange durchgelaufen, bis x>0 ist, dann müsste doch in der Ausgabe die ganze Zahl stehen?

Java:
import javax.swing.JOptionPane;

public class Dec_converter {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		String xS = JOptionPane.showInputDialog("Bitte geben Sie eine ganze Zahl ein: "),
			nS = JOptionPane.showInputDialog("Bitte geben Sie eine Basiszahl ein: ");
		
		int x = Integer.parseInt(xS), n = Integer.parseInt(nS), y = 0, z = 0;

do{
	y=x/n;
	z=x%n;
	x=y;
	
		}
while(x>0);
String s1 = String.valueOf(z);
String s2 = new StringBuilder(s1).reverse().toString();

JOptionPane.showMessageDialog(null, "Die konvertierte Zahl lautet: "+s2);

}



	}
 
Weil du z jeden Durchgang veränderst, aber das Ergebnis ja nie irgendwo speicherst. Was du dir auch unbedingt angewöhnen solltest, sind sprechende Variablen.

Java:
    public static void main(String[] args)
    {
        String xS = JOptionPane.showInputDialog("Bitte geben Sie eine ganze Zahl ein: "),
                nS = JOptionPane.showInputDialog("Bitte geben Sie eine Basiszahl ein: ");

        int zahl = Integer.parseInt(xS);
        int basis = Integer.parseInt(nS);
        int division = 0;
        int modulo = 0;

        String s1 = new String();
        do
        {
            division = zahl / basis;
            modulo = zahl % basis;
            s1 += String.valueOf(modulo);
            zahl = division;
        }
        while (division > 0);

        String s2 = new StringBuilder(s1).reverse().toString();
        JOptionPane.showMessageDialog(null, "Die konvertierte Zahl lautet: " + s2);
    }

PS: In das 16er System kann das ganze natürlich nicht umrechnen, hier solltest du vielleicht dein Konzept noch mal ganz überdenken.
 
Öhm versteht mich nicht falsch, aber warum nicht einfach

Java:
s1 = String.valueOf(modulo) + s1;


[EDIT]
Bzw.
Java:
s1 = ArrayMitZahlenUndBuchstaben[modulo] + s1;

[/EDIT]
 
Zuletzt bearbeitet:

Zurück
Oben