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:
importjavax.swing.JOptionPane;publicclassDec_converter{/**
* @param args
*/publicstaticvoidmain(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
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:
importjavax.swing.JOptionPane;publicclassDec_converter{/**
* @param args
*/publicstaticvoidmain(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 =newStringBuilder(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:
importjavax.swing.JOptionPane;publicclassDec_converter{/**
* @param args
*/publicstaticvoidmain(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 =newStringBuilder(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:
publicstaticvoidmain(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 =newString();do{
division = zahl / basis;
modulo = zahl % basis;
s1 +=String.valueOf(modulo);
zahl = division;}while(division >0);String s2 =newStringBuilder(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.