# dezimal zu hexadezimal



## Faighter (12. Nov 2010)

Guten Abend allerseits,

ich habe folgendes Problem, das folgende Programm soll Dezimal Zahlen von 0-255 nach der Eingabe in Hexadezimalzahlen umwandeln. Allerdings bekomme ich irgendwie nicht hin das die Zahlen wie z.B 1515 (kommt raus wenn 255 umgewandelt werden soll) in FF umgewandelt werden. Ich habe schon viel rumprobiert und komme leider euf keine vernünftige Lösung.

Erlaubt sind nur if und switch (und auch die Operatoren &;&&;|;||, allerdings glaube ich nicht die die bei diesem Programm einsetzbar sind.), da es sich um eine Aufgabe aus der Schule handelt.

Ich hoffe ihr könnt mir da weiterhelfen.



```
import java.util.Scanner;
	public class hexazahlen {

	/**
	 * @param args
	 */
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner tastatur;						//Scanner
		tastatur = new Scanner(System.in);		
		int dezimale;
		System.out.print("Bitte geben sie eine Zahl von 0-255 ein: ");
		dezimale=tastatur.nextInt();
		int restx = dezimale/16;			//Berechnung der Hexazahl 
		int reste = dezimale%16;			//Berechnung der Hexazahl 
			if(dezimale <10){
				System.out.print("Ihre Zahl ist im Hexadezimalsystem: " +dezimale);
			}
			else{
			 // if(dezimale >= 10) {  //reste vom ersten Versuch				  
				  switch (dezimale) 
				  {
                         case 10:
                         System.out.print("Ihre Zahl ist im Hexadezimalsystem: A");
                         break;
                         case 11:
                         System.out.print("Ihre Zahl ist im Hexadezimalsystem: B");
                         break;
                         case 12:
                         System.out.print("Ihre Zahl ist im Hexadezimalsystem: C");
                         break;
                         case 13:
                         System.out.print("Ihre Zahl ist im Hexadezimalsystem: D");
                         break;
                         case 14:
                         System.out.print("Ihre Zahl ist im Hexadezimalsystem: E");
                         break;
                         case 15:
                         System.out.print("Ihre Zahl ist im Hexadezimalsystem: F");
                         break;
                         default:
                         System.out.print("Ihre Zahl im Hexadezimalsystem ist:" +restx+reste); //Ausgabe der Zahlen > 15

				  
			  	}
			  }
			/*	  else   {
			  		System.out.print("Ihre Zahl im Hexadezimalsystem ist:" +restx+reste);   //reste vom ersten Versuch	
				  
                 
                         }	*/
	}
}
```


----------



## eRaaaa (12. Nov 2010)

Faighter hat gesagt.:


> Allerdings bekomme ich irgendwie nicht hin das die Zahlen wie z.B 1515 in FF umgewandelt werden.


1515 ist nicht FF
15 = F
1515 = 5EB !

Schau dir mal Umrechnung von Zahlensystemen, bei angeklicktem "bei jeder Eingabe erklären" an,
Du musst eben IMMER bei dem Rest gucken ob der Größer= 10 ist und dann dein switch machen, nicht nur einmal...

Schleifen sind doch bestimmt auch erlaubt oder etwa nicht? =)


----------



## Faighter (12. Nov 2010)

Ich glaube ich habe in meinem Startpost was vergessen. Wir müssen nur den Zahlenbereich von 0-255 abdecken. Das 1515 kommt momentan noch raus wenn ich 255 umwandeln will, was ja eigentlich FF sein sollte.

Ich werde meinen Startpost dementsprechend ändern.

Schleifen sind tabu, ich weiß zwar so einigermaßen wie ich sie einsetzte, allerdings waren die Schleifen noch nicht Thema im Unterricht (wir haben erst seit diesem Schuljahr java).

mfg


----------



## Michael... (13. Nov 2010)

Du musst restx und reste mit dem switch überprüfen nicht dezimale.

Man könnte das auch ohne switch lösen,
z.B. per ASCII Tabelle berechnen 'A' entspricht 65, usw.
z.B. per char - Array das man für die Ausgabe verwendet.


----------



## Faighter (13. Nov 2010)

Ich danke auch beiden für eure Hilfe.

Ich habe das Programm nun zum laufen gebracht und zwar nur mit if, switch und &.

Auch wenn ich bei der Ausgabe ein wenig tricksen musste ^^

mfg


----------



## noobadix (13. Nov 2010)

Magst du die Lösung posten?


----------



## Faighter (14. Nov 2010)

gerne. 


```
/* Author: Faighter
 * Date: 13:11.2010
 */

import java.util.Scanner;
	public class hexazahlen {

	/**
	 * @param args
	 */
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner tastatur;						//Scanner
		tastatur = new Scanner(System.in);		
		int dezimale;
		System.out.print("Bitte geben sie eine Zahl von 0-255 ein: ");
		dezimale=tastatur.nextInt();
		int restx = dezimale/16;			//Berechnung der Hexazahl 
		int reste = dezimale%16;			//Berechnung der Hexazahl 
			if(dezimale <10){
				System.out.print("Ihre Zahl ist im Hexadezimalsystem: " +dezimale);
			}
			if(dezimale >9 & dezimale <16){
                switch (dezimale)
                {
                       case 10:
                       System.out.print("Ihre Zahl ist als Hexadezimale: A");
                       break;
                       case 11:
                       System.out.print("Ihre Zahl ist als Hexadezimale: B");
                       break;
                       case 12:
                       System.out.print("Ihre Zahl ist als Hexadezimale: C");
                       break;
                       case 13:
                       System.out.print("Ihre Zahl ist als Hexadezimale: D");
                       break;
                       case 14:
                       System.out.print("Ihre Zahl ist als Hexadezimale: E");
                       break;
                       case 15:
                       System.out.print("Ihre Zahl ist als Hexadezimale: F");
                }
			}
			if(dezimale >15){
               if(restx >9 & restx <16) {
            	   switch (restx)
                   {
                   case 10:
                       System.out.print("Ihre Zahl ist als Hexadezimale: A");
                       break;
                       case 11:
                       System.out.print("Ihre Zahl ist als Hexadezimale: B");
                       break;
                       case 12:
                       System.out.print("Ihre Zahl ist als Hexadezimale: C");
                       break;
                       case 13:
                       System.out.print("Ihre Zahl ist als Hexadezimale: D");
                       break;
                       case 14:
                       System.out.print("Ihre Zahl ist als Hexadezimale: E");
                       break;
                       case 15:
                       System.out.print("Ihre Zahl ist als Hexadezimale: F");
                   }
            	  
               }
               else{
            	System.out.print("Ihre Zahl ist im hexadezimalsystem: "+restx);   
            	   
               }
            	if(reste >9 & reste <16){
                    switch (reste)
                    {
                           case 10:
                           System.out.print("A"); 
                           break;
                           case 11:
                           System.out.print("B");
                           break;
                           case 12:
                           System.out.print("C");
                           break;
                           case 13:
                           System.out.print("D");
                           break;
                           case 14:
                           System.out.print("E");
                           break;
                           case 15:
                           System.out.print("F");
                    }
            	}
            	else{
                System.out.print(+reste);

            	}
			}
	}		
}
```


----------



## noobadix (15. Nov 2010)

Mir persönlich gefällt das mit dem if nicht, drum hier noch ein anderer Ansatz: 4 Bits repräsentieren eine Stelle im Hexadezimalsystem, wenn man diese also zur dezimalen Zahl x umwandelt, kann man sich das Zeichen aus einem Array an Position x holen. 


```
public class ToHexByBits {
	final String[] hexen = {"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"};
	public static void main(String[] args) {
		new ToHexByBits(44203);
	}
	
	public ToHexByBits(int source){
		System.out.println("RESULT: "+toHex(Integer.toBinaryString(source)));
	}
	
	//evtl. rekursiv durch die 32 bits
	public String toHex(String arg){
		return (arg.length()>4)? hexen[Integer.valueOf(arg.substring(0,4),2)]+toHex(arg.substring(4)) : hexen[Integer.valueOf(arg,2)];
	}
}
```


----------



## c_sidi90 (15. Nov 2010)

oder z.B. so :


```
private void umwandelnHexadezimal(){
	
			String ergebnis ="";
			//Folgende Zeile ist für die Speicherung der Benutzereingabe
			//in meinem Beispiel ziehen wir die Eingabe aus einer Textfeld Komponente
			//und speichern diesen in einer Integer Variable zahl
			
			int zahl = Integer.parseInt(zahleneingabe.getText());
			
			//Prüfung der Zahlen 
			while (zahl > 0){
		
				if(zahl%16==10){
					ergebnis = ergebnis + "A";
					zahl = zahl/16;
				}
				if(zahl%16==11){
					ergebnis = ergebnis + "B";
					zahl = zahl/16;
				}
				if(zahl%16==12){
					ergebnis = ergebnis + "C";
					zahl = zahl/16;
				}
				if(zahl%16==13){
					ergebnis = ergebnis + "D";
					zahl = zahl/16;
				}
				if(zahl%16==14){
					ergebnis = ergebnis + "E";
					zahl = zahl/16;
				}
				if(zahl%16==15){
					ergebnis = ergebnis + "F";
					zahl = zahl/16;
				}
				
				if (zahl%16 <10){
					ergebnis = ergebnis + zahl%16;
				}
				
				zahl = zahl/16;
			}
				//Das ergebnis muss bei der Umwandlung ja Rückwerts ausgegeben werden
				//Deshalb wandeln wir den String mit .reverse() um.
				ergebnis = new StringBuffer(ergebnis).reverse().toString();
				
				System.out.println(ergebnis);
	}
```


----------



## ARadauer (15. Nov 2010)

> if(zahl%16==13){
> ergebnis = ergebnis + "D";
> zahl = zahl/16;
> }
> ...


ok, ich hab mir das jetzt nicht alles durchgelesen, aber ich muss leider sagen, dass wenn man sowas sieht, es meist unflexibel ist... sowas kann man eigentlich immer mit arrays vereinfachen.

Hexadezimal ist ja einfach nur ein Zahlensystem mit der Basis 16... hab da mal was geschrieben in der man jedes Zahlensystem in ein andres umwandeln kann.. vielleicht hilft das


```
public class AlienNumbers {

   public static void main(String[] args)  {
     System.out.println(convert("101", "01", "0123456789")); // das ist binär nach dezimal
     System.out.println(convert("15", "0123456789", "0123456789ABCDEF")); //dezimal nach hexadezimal
     System.out.println(convert("215", "0123456789", "0123456789ABCDEF"));
     System.out.println(convert("215", "01234567", "0123456789ABCDEF")); //okal nach hexadezimal
     System.out.println(convert("1112", "0123456789", "BierSaufen;-)")); //dezimal nach biersaufenimal ;-)   
   }

   public static String convert(String value, String sourceLang, String targetLang){
      int dez = parseToDezimal(sourceLang, value);
      return writeToLanguage(targetLang, dez);
   }

   public static int parseToDezimal(String sourcelang, String value){
      int pot = sourcelang.length();
      int result = 0;

      for(int i = 0; i <value.length(); i++){
         char c = value.charAt(value.length()- i-1);
         int v = sourcelang.indexOf(c);
         int r = (int) (v * Math.pow(pot, i));
         result += r;
      }
      return result;
   }

   public static String writeToLanguage(String targetLang, int dezimalValue){
      int pot = targetLang.length();
      StringBuilder result = new StringBuilder();

      while(dezimalValue!=0){
         int v = dezimalValue %pot;
         dezimalValue = dezimalValue/pot;

         result.append(targetLang.charAt(v));
      }

      return result.reverse().toString();
   }

}
```


----------



## c_sidi90 (15. Nov 2010)

Da hast du recht, aber es erfüllt den Zweck der Aufgabe. Bietet die API nicht auch schon Methoden zur Umwandlung von Zahlen? 

Habs jetzt nur auf die schnelle geschrieben, müsste aber funktionieren.

Mfg


----------



## bone2 (15. Nov 2010)

```
System.out.println(Integer.toString(255, 16));
```
obwohl ich bezweifel, das das das ist was der lehrer sehen will^^


----------



## ARadauer (15. Nov 2010)

> Da hast du recht, aber es erfüllt den Zweck der Aufgabe. Bietet die API nicht auch schon Methoden zur Umwandlung von Zahlen?


der sinn von solchen aufgaben ist es das handwerkszeug zu lernen und die api nicht zu verwenden.


----------



## c_sidi90 (16. Nov 2010)

> der sinn von solchen aufgaben ist es das handwerkszeug zu lernen und die api nicht zu verwenden.



Darum ja auch mein erster Post ohne vorgaben aus der API


----------



## Faighter (16. Nov 2010)

Ich danke euch für die vielen verschiedenen Lösungsansätze. Ich werde mir wohl noch ein paar dieser Lösungsvorschläge noch näher anschauen.

mfg


----------

