Zahlensysteme manuell umrechnen

julia_76

Mitglied
Hallo,

als Anfänger habe ich eine frage. Ich habe einen String z.b "A3" welcher über die Konsole eingegeben wurde. nach einer vorgabe sollen jetzt die Buchstaben in zahlen umgerechnet werden. A hat z.b den wert 10.
Aktuelle habe ich keine ahnung wie ich das anstellen kann. Kann mir vielleicht jemand einen Tipp geben.

Gruß.
 

Saheeda

Top Contributor
Du könntest das über einen switch machen:

Code:
string convert = "a";

switch(convert){
    case "a":
      return 10;
    case "b":
      return 11;
...
    case "f":
      return 16;
    default:
      return 20;

}
 
Zuletzt bearbeitet:

julia_76

Mitglied
erst einmal danke für die Hilfe.
Jetzt ergeben sich zwei neue Fragen.

1. werden im String die einzelnen Buchstaben jetzt durch die dementsprechenden Zahlen ersetzt?
2. ich bekomme jetzt die Fehlermeldung "void methods cannot return". Anscheinend stört er sich an den Zahlen.

Gruß.
 

julia_76

Mitglied
Hier das Programm. Ist leider noch nicht mehr, da ich daran scheitere die Buchstaben in den String "eingabe" durch Zahlen zu ersetzen.

Java:
import java.util.Scanner;

public class AUFGABE_4 {

    public static void main(String[] args) {
        
        
        Scanner scanner = new Scanner(System.in);
        
        //Eingabe 
        
        System.out.println("Mit diesem Tool können Sie Zahlensysteme umrechnen.");
        System.out.println();
        System.out.println("Bitte geben Sie Ihren Ausgangs Zahlensystem ein: 2 = binär; 8 = oktal; 10 = dezimal; 12 = duodezimal; 16 = hexadezimal");
        int vonBasis = scanner.nextInt();
        System.out.println();
        System.out.println("Bitte geben Sie Ihr Ziel Zahlensystem ein: 2 = binär; 8 = oktal; 10 = dezimal; 12 = duodezimal; 16 = hexadezimal");
        int zuBasis = scanner.nextInt();
        System.out.println();
        System.out.println("Bitte geben Sie Ihre Zahl zur Umrechnung ein:");
        String eingabe = scanner.next();
        System.out.println();
        
        scanner.close();
        
        
        
        // Umrechnung String


        switch(eingabe){
        
            case "0":
              return 0;
            case "1":
              return 1;
            case "2":
              return 2;
            case "3":
              return 3;
            case "4":
              return 4;
            case "5":
              return 5;
            case "6":
              return 6;
            case "7":
              return 7;
            case "8":
              return 8;
            case "9":
              return 9;
            case "A":
              return 10;
            case "B":
              return 11;
            case "C":
              return 12;
            case "D":
              return 13;
            case "E":
              return 14;
            case "F":
              return 15;
            default:
              return;
              }
            

    }

Aufgabe: Ich muss Zahlensysteme umrechnen, ohne wrapper Klassen zu benutzen.
 
Zuletzt bearbeitet von einem Moderator:

julia_76

Mitglied
Aufgabe: Schreiben Sie ein Programm zur Umrechnung von Zahlen aus einem Zahlensystem in ein anderes
stellwertiges Zahlensystem.
Das Programm soll dann die Zahl auf der Konsole ausgeben. Natürlich soll Ihr Programm etwaige Hilfsmethoden zur Zahlenbasisumwandlung der numerischen Wrapper-Klassen nicht verwenden!
 

stg

Top Contributor
Aufgabe: Schreiben Sie ein Programm zur Umrechnung von Zahlen aus einem Zahlensystem in ein anderes
stellwertiges Zahlensystem.
Das Programm soll dann die Zahl auf der Konsole ausgeben. Natürlich soll Ihr Programm etwaige Hilfsmethoden zur Zahlenbasisumwandlung der numerischen Wrapper-Klassen nicht verwenden!

Jetzt ergibt das ganze schon deutlich mehr Sinn. Du sollst natürlich nicht einfach in dem übergebenen String "A" durch "10" ersetzen, sondern tatsächlich von einer Zahlendarstellung in die andere Umrechnen.
Verstehst du, wie die Mathematik dahinter funktioniert?

Weil ich gerade Langeweile habe hier ein Vorschlag für die Umrechnung von duodezimal nach dezimal:
Java:
public static int duoToDezi(String duo) {
		String s = "0123456789AB";
		int dez = 0;
		for (int i = 0; i < duo.length(); i++) {
			char c = duo.charAt(i);			
			dez = 12*dez + s.indexOf(c);
		}
		return dez;
	}

Es gibt natürlich noch einige Stolpersteine, die hier nicht beachtet werden (z.B. negative Zahlen, groß/klein-Schreibung, ...) aber vom Ansatz her sollte damit deine Aufgabe so gut wie gelöst sein..
 
Zuletzt bearbeitet:

stg

Top Contributor
Was für Repräsentanten man wählt ist ja wurscht und auch in der Literatur keineswegs einheitlich. X und E wird ja auch nur benutzt, wenn das benutzte System nix schöneres darzustellen vermag :)

Es muss nur kommuniziert werden, was man denn nun tatsächlich für welche gewählt hat.
 

julia_76

Mitglied
Hallo,

ich hätte zu meiner Aufgabe noch eine Frage. Das Programm ist zu 95% fertig. Leider habe ich beim umrechnen von dezimal zu duodezimal ein Problem und verstehe die Ausgabe auf der Konsole nicht.

folgender Code liegt zur umrechnung vor.

Java:
public static String deziToDuo(String duo) {
	
	 String s = "0123456789ABCDEF";
	 
 	 int rest;
	 String ergebnis = "";
	 boolean abbruch = true;
	 
	 int umwandlungInInt = Integer.parseInt(duo);
	 
	 while (abbruch) {
		
		rest = umwandlungInInt % 12;

		char test = (char) s.indexOf(rest);
		
		StringBuilder sb = new StringBuilder(test);
		
		ergebnis = sb.reverse().toString();
		umwandlungInInt = umwandlungInInt / 12;
		
		if (umwandlungInInt  == 0){
	           
	           abbruch = false;
		}
		
	 }	
	 
 	 return ergebnis;	
}

Als Ergebnis wird ein einzelnes Zeichen ausgegeben(siehe Anhang). Hängt das mit dem ascii Code zusammen?

Das Problem liegt auf jeden fall in dieser Zeile "char test = (char) s.indexOf(rest);". Aber ich verstehe das Problem nicht. Es währe super, wenn mir jemand nochmals eine Hilfestellung geben könnte.

Gruß.
 

Anhänge

  • Bildschirmfoto 2014-10-04 um 22.37.06.png
    Bildschirmfoto 2014-10-04 um 22.37.06.png
    7,2 KB · Aufrufe: 21

JavaMeister

Gesperrter Benutzer
Das Problem ist, dass indexOf(int i) den index des mit dem int assozierten chars zurück gibt.

Wenn du dort also 2 eingibst, bekommst du index -1 zurück.
 

julia_76

Mitglied
Ich habe das jetzt mal mit der Zahl 2 versucht. Wo holt er sich den wert -1 her?
Wenn ich jetzt im Debugger schaue beomme ich für "test" nicht den wert -1 geliefert, sondern wieder dieses Zeichen (siehe oben). Ich habe jetzt auch festgestellt, das es keine rolle spielt welche dezimalzahl ich eingebe. Das ergebnis ist immer das gleiche.
Ich stehe echt auf der Leitung und verstehe das Problem leider immer noch nicht.
 

JavaMeister

Gesperrter Benutzer
Wenn du als Dezimal 10 übergibst.,

dann rufst du indexOf mit "10" auf. Als Integer. Also wird 10 zu dem entsprechenden Zeichen in der acii Tabelle umgewandelt und im String gesucht. Also "LineFeed (LF)". Ist nicht im String enthalten als bekommst du -1.

Damit stimmt die gesamte Berechnung nicht. Das komische Zeichen, was du bekommst kommt daher, dass dein Encode komisch ist oder so. Oder ein anderer Fehler, der auf jeden Fall ein Folgefehler ist.
 

julia_76

Mitglied
Jetzt wird mir auch klar, weshalb das ganze nicht funktioniert hat. Irgend wie war ich der Meinung das er im String sucht und dieses zeichen als char abspeichert.

Ich habe den Code geändert. Jetzt muss ich nur noch schauen das er den String richtig aufbaut. Aber das sollte ich hinbekommen.

Java:
while (abbruch) {
		
		rest = umwandlungInInt % 12;

		char test = (char) s.charAt(rest);
		
		String test1 = String.valueOf(test);
		StringBuilder sb = new StringBuilder(test1);
		
		ergebnis = sb.reverse().toString();
		umwandlungInInt = umwandlungInInt / 12;
		
		if (umwandlungInInt  == 0){
	           
	           abbruch = false;
		}
		
	 }	
	 
 	 return ergebnis;

Vielen Dank für die Hilfestellung.
 

Neue Themen


Oben