JAVA-Problem: Hexadezimalzahlen umwandeln (Binär, Dezimal)
Hey Leute, ich habe als frischer Informatikstudent ein kleines Problem.
Die Aufgabe lautete: Wenn ich etwas eingebe, beispielsweise eine Dezimalzahl, dann soll dafür die jeweilige Hexadezimal-, Binär- oder Oktalzahl ausgegeben werden. Ein Programm für eine Binär- und Dezimalzahleingabe habe ich schon geschrieben. Diese verschiedenen Eingaben sollen nacheinander funktionieren, d.h. das folgende Programm muss dann nur noch in das Hauptprogramm gebracht werden, was denke ich kein Problem sein wird.
Problem: Eine Hexadezimalzahl kann eine Zahl oder ein Buchstabe sein, deshalb konnte ich für die einzugebende Zahl kein "int" nehmen. Ich habe jedoch keinerlei Ahnung wie ich das Programm dazu bringen kann einen String als int zu sehen... Ich habe deshalb etwas versucht was jedoch aus irgendeinem Grund nicht funktioniert. im Hauptprogramm habe ich Integer.toBinaryString(), Integer.toHexalString etc. verwendet.
Kann mir jemand das Brett vor dem Kopf entfernen? (bzw. den Denkfehler beheben....)
PROGRAMM:
import java.util.Scanner;
public class ZahlensystemHex {
public static void main(String[] args)
{
Scanner sc1 = new Scanner(System.in);
System.out.println("Bitte geben Sie eine Zahl hexadezimal ein");
String hex = sc1.next();
int hex1 = Integer.parseInt(hex, 16);
System.out.println("Dezimal: " + Integer.toString(hex1));
System.out.println("Binär: " + Integer.toBinaryString(hex1));
sc1.close();
}
}
2 Antworten
Deine Beschreibung und der Quelltext passen irgendwie nicht ganz zusammen. Du meinst du hast keine Ahnung, wie du es schaffst aus dem String ein Int zu machen, machst aber genau das im Quelltext.
Was ist denn jetzt das eigentliche Problem mit deinem Programm? Was funktioniert denn denn nicht? Wird ein falsches Ergebnis angezeigt? Kommt ein Fehler?
Ich habe wirklich keine Ahnung. Die Sache ist unser Professor ist in der Theorie viel weiter hinten als "wir" in der Praxis(Übungsstunden). Mein Tutor hat mir bei der Umwandlung etwas geholfen, aber keine Lösung für das Problem gegeben.
Wenn ich es in Eclipse ausführe kommen erstmal einige Meldungen "obsolete Methods" und der Debugger und dass kann ich erst eine Eingabe machen: z.B. FF
Anschließend geschieht nichts.
Du verstehst Javas Auffassung von Zahlen völlig falsch!
byte, short, int und long sind Ganzzahlentypen in Java, sie unterscheiden sich in ihrer Speichergröße und damit in ihrer Maximalgröße.
Dezimal, Hexadezimal und Oktal sind nur DARSTELLUNGSWEISEN
long a=150;
a=0b10101010101110101;
a=0377;
a=0xCAFEBABE;
Es gibt in JavaSE direkt Funktionen zum Umwandeln von Ganzzahlen in Darstellungsweisen bestimmter Zahlensysteme und ebenso Funktionen um dies rückgängig zu machen.
Der Sinn deiner Aufgabe wird aber nicht sein, diese Funktionen zu finden, sondern selbst welche zu schreiben, oder?
die korrekte Anwendung von Integer.parseInt(String s, int base) ist mir nicht bewusst..
In wie fern?
http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html#parseInt(java.lang.String, int)
base heißt eigentlich radix.
Es bewirkt, dass ein String zu einem int umgewandelt wird?
Eventuell erwartet der Professor auch, dass (zumindest für die Ausgabe - eventuell aber auch für die Eingabe) die Umwandlung von "lesbarer" Zahl (d.h. String, der eine Dezimal-, Oktal-... -zahl darstellt) in einen Integer und zurück "von Hand" (also in einer selbstgeschriebenen Funktion) gemacht wird.
Hintergrund: Alles, was man irgendwie per Tastatur eingeben oder auf dem Bildschirm ausgeben kann, ist in Wahrheit ein String. Bei einem "println(Zahl)" wird in Wahrheit die Zahl (int) in eine String (und zwar dezimal) umgewandelt und dann ausgegeben. Bei der Eingabe einer Zahl ist das ähnlich.
Eventuell wünscht der Professor, dass du nicht "Integer.parseInt()" benutzt, sondern die Umwandlungsfunktion selbst schreibst.
In der Aufgabe stehen die dazugehörigen Funktionen, nur die korrekte Anwendung von Integer.parseInt(String s, int base) ist mir nicht bewusst.. Ich denke diese ist hier wichtig.
Arbeitsauftrag
Schreiben Sie ein Konsole n programm Zahlensysteme , das jeweils einen Zahlenwert in andere Zahlensysteme konvertiert. Das folgende Beispiel zeigt die Benutzung anhand eines Beispiels:
Bitte geben Sie ei ne Zahl dezimal ein
11
Hex: b
Binär:1011
Bitte geben Sie eine Zahl hexadezimal ein
FF
Dezimal: 255
Binär: 11111111
Bitte geben Sie eine Zahl binär ein
101
Dezimal: 5
Hex: 5
Bitte geben Sie eine Zahl octal ein
77
Dezimal:
63
Hex: 3f
Lösungshinweis: Ve rwend en Sie hierzu die Integer.parseInt(String s, int base) Methode . Machen Sie sich außerdem mit den Funktionen Integer.toBinaryString sowie Integer . toHexString vertraut.