# Zahlensysteme manuell umrechnen



## julia_76 (1. Okt 2014)

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 (1. Okt 2014)

Du könntest das über einen switch machen:


```
string convert = "a";

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

}
```


----------



## julia_76 (1. Okt 2014)

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ß.


----------



## Flown (1. Okt 2014)

Schreib mal dein komplettes Programm hier rein. So kann man dir nicht helfen!


----------



## stg (1. Okt 2014)

Flown hat gesagt.:


> Schreib mal dein komplettes Programm hier rein. So kann man dir nicht helfen!



...und den exakten Wortlaut der Aufgabenstellung.


----------



## sti (1. Okt 2014)

julia_76 hat gesagt.:


> 2. ich bekomme jetzt die Fehlermeldung "void methods cannot return". Anscheinend stört er sich an den Zahlen.
> 
> Gruß.


Nope. Du hast einfach nur die Switch-Case in ner Methode die Void zurückliefert


----------



## julia_76 (1. Okt 2014)

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


```
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.


----------



## stg (1. Okt 2014)

julia_76 hat gesagt.:


> Aufgabe: Ich muss Zahlensysteme umrechnen, ohne wrapper Klassen zu benutzen.



Und das steht in exakt diesem Wortlaut so auf deinem Aufgabenzettel? Stell ich mir witzig vor...


----------



## julia_76 (1. Okt 2014)

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. Natürlich soll Ihr Programm etwaige Hilfsmethoden zur Zahlenbasisumwandlung der numerischen Wrapper-Klassen nicht verwenden!


----------



## Flown (1. Okt 2014)

Topic umbenannt und ins richtige Forum verschoben


----------



## stg (1. Okt 2014)

julia_76 hat gesagt.:


> 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. Natü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_:

```
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..


----------



## Thallius (1. Okt 2014)

Duodezimal verwendet aber X und E und nicht A und B 

Gruss

Claus


----------



## stg (1. Okt 2014)

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 (1. Okt 2014)

erst einmal danke für die Hilfe. Ich werde mir das jetzt in Ruhe noch einmal anschauen und meine Ideen/Vorstellungen überdenken.


----------



## julia_76 (4. Okt 2014)

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.


```
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ß.


----------



## JavaMeister (5. Okt 2014)

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 (5. Okt 2014)

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 (5. Okt 2014)

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 (5. Okt 2014)

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.


```
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.


----------

