Klassen Decimal to Hexadecimal

iCoholiX

Mitglied
Hey Community,

bin schon seit längerem auf der Suche nach einem kompetenten Forum in Sachen Java-Programmierung. Naja, zu meinem Thema :D :

Ich versuche mich gerade dabei eine Verschlüsselung zuschreiben. Habe mir dazu schon viele bekannte Wege angeschaut und mich für das Hexadezimalsystem entschieden.

Für die, die es nicht kennen:
Hexadezimalsystem ? Wikipedia

Java:
import java.util.*;

public class Bllaaaaaa 
{
	static void main(String[] args)
	{
		int input;
		String[] n = new String[0];
		double[] z = new double [0];
		Scanner s = new Scanner(System.in);
		
		System.out.println("Zahl eintippen");
		input = s.nextInt();
		
		for (int d=0; input==0; d++)
		{
			int i;
			//Schritt 1
			for(i = 0; i<10;i++)
			{
				if(input<Math.pow(16, i))
					break;
			}
			System.out.println(i);
			
			//Schritt 2
			z = new double[n.length+1];
			//a16 = Math.pow(16, i-1);
			z[d]= input / (Math.pow(16, i-1));
			
			//Schritt 3
			 input -= (Math.pow(16, i-1));					
		}
		
		for(int zähl=0; zähl < z.length; zähl++)
		{
			System.out.println(z[zähl]);
		}					
	}
}

Mein Code funktioniert nicht. Hat einer von euch eine iDee?
Danke schonmal vorab! :)

Greets
-iCoholiX-

PS: Ich weiß, dass Java diese Umrechnung von Haus aus schon unterstützt, dennoch möchte ich diese Methode separat haben ;) .
 
Zuletzt bearbeitet:
M

Marcinek

Gast
Hi,

welcher Fehler kommt?

Welche Ausgabe kommt bei welcher Eingabe?

Was hättest du als Ausgabe erwartet?

Gruß,

Martin

P.S: Du bist nicht der erste, der sowas implementieren muss. :idea:
 

iCoholiX

Mitglied
Hmm .. was der Fehler ist kann ich dir nicht sagen, aber ich kann dir sagen was ich erwartet habe.
Ich habe mir das ganze Prinzip in 3 Schritte eingeteilt, wie man an den Kommentaren im Code sieht ;) :
Hier verdeutlicht an der Zahl 6014:

Schritt1:

Eine Schleife soll herausfinden wann 6014 (z.B. in der Variablen zahl) kleiner ist als die nächste Potenz von 16. (Lösung 1 7 7 E)

6014 < 16^0=1
6014 < 16^1=16
6014 < 16^2=256
6014 < 16^3=4096
6014 > 16^4=65536

Und soll sich in diesem Schritt die Zahl 4 merken (z.B. in der Variablen i).

Schritt2:

6014 soll durch 16^(i-1) = 16^3 = 6014/4096. Dieses Ergebnis soll als Integer ausgegeben werden (z.B. in der Variablen b), damit es eine Ganzzahl ist. [b=1]

Schritt3:
(b*16^i-1) soll nun von 6014 abgezogen werden = 6014-(1*16^3) = 6014-(1*4096) = 1918
1918 soll die Ausgangszahl überschreiben.

b ist die erste Lösungszahl (zur Erinnerung die Lösung ist 1 7 7 14 bzw 1 7 7 E)
Und eine Schleife, die diese Schritte zusammenfasst, soll diesen Vorgang mit zahl solange wiederholen bis zahl == 0.

Hoffe das war irgendwie verständlich bzw. erkennbar im Code, wenn nicht muss ich mich eben nochmal an eine ausführlichere Erklärung setzen :D :D .
Als Lösung hatte ich erwartet: 1 7 7 14.

Greets
-iCoholiX-
 
Zuletzt bearbeitet:
M

Marcinek

Gast
Schau dir mal an, wie man for() Schleifen definiert.

Danach kommt sowieso ein weiterer Fehler, der mit Arrays zu tun hat.
 

iCoholiX

Mitglied
Danke, ich weiß wie man for-Schleifen definiert.
Was soll diese unproduktive Antwort? Kannst du nicht die Zeile im Code direkt ansprechen, die du meinst? Ich will dich ja nicht irgendwie schlecht machen, aber so ne Antwort bringt mir null.

Greets
-iCoholiX-
 
M

Marcinek

Gast
Naja ich habe dein Programm ausgeführt und es kam zu keinen Fehler und keiner Ausgbabe.

Dann habe ich debugger angeworfen und gesehen, dass der Code garnicht ausgeführt wird.

Schreibe dir Debugausgaben, wenn du noch nicht den debugger verwendest.
 

iCoholiX

Mitglied
Ich hab es früher in der Schule so gelernt, dass das mittlere-Argument eine Abbruchbedingung ist die heißt : bis dass. Sorry für die falsche Annahme!!!

Edit:
Habe das == durch ein != ersetzt. Jetzt tritt die OutOfBoundExeption auf. Ich nehme an etwas mit dem Array?
 
Zuletzt bearbeitet:

Pentalon

Bekanntes Mitglied
Die For Schleife hab ich anders in Erinnerung:

Java:
for(int i = 0; i<20;i++)
Wiederholen solange i < 20

Deine Schleife:
Java:
for (int d=0; input==0; d++)
Wiederholen solange input == 0

Hier noch was:
Java:
            z = new double[n.length+1];
            z[d]= input / (Math.pow(16, i-1));

Mit der ersten Zeile möchtest Du (glaube ich) Dein Array vergrössern.
Bereits zugewiesene Werte werden damit aber verworfen, weil Du ein neues Array anlegst.
Die Länge von n.length+1 zu verwenden, dass sich nie ändert führt auch zu einem Fehler, weil Du eine Zeile später auf das neue Feld (das nicht da ist) zugreifen möchtest -> index out of bounds.

Da ist noch nicht alles, aber einmal ein Anfang.

Pentalon
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J convert int to hexadecimal? Java Basics - Anfänger-Themen 5

Ähnliche Java Themen


Oben