Java :: Aufgabe #67
4 Lösungen

Zahlenausgabe in verschiedenen Schreibweisen
Anfänger - Java
von pocki
- 26.11.2014 um 11:53 Uhr
Schreibe ein Programm, welches eine positive Ganzzahl in dezimaler Schreibweise entgegen nimmt.
Gib diese Zahl dann in binärer, oktaler und hexadezimaler Schreibweise, ohne Verwendung der integrierten Formatierungsfunktionen, wieder aus.
Beispiel:
Gib diese Zahl dann in binärer, oktaler und hexadezimaler Schreibweise, ohne Verwendung der integrierten Formatierungsfunktionen, wieder aus.
Beispiel:
Konsolenausgabe:
Zahl eingeben: 365
binär: 101101101
oktal: 555
hexadezimal: 16D
Lösungen:

/** * @author ElPapito * @date 05.05.2015 */ import java.util.Scanner; public class ZahlenausgabeInVerschiedenenSchreibweisen { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("Zahl eingeben: "); int decimal = scanner.nextInt(); scanner.close(); System.out.println("binär: " + convert(decimal, 2)); System.out.println("oktal: " + convert(decimal, 8)); System.out.println("hexadezimal: " + convert(decimal, 16)); } public static String convert(int num, int base) { String str = ""; while (num > 0) { int help = (num % base); if (help < 10) { // test if digit str = help + str; } else { // or letter str = (char) ('A' + help - 10) + str; } num = num / base; } return str; } }
Anmerkung: Habe noch Duodezimal hinzugefügt
Main-Klasse:
Java-Code
Die Methoden die ich aus meinem eigenem Methodensammlung package benutzt habe:
Java-Code
Main-Klasse:

import Methodensammlung.Methoden; /** * Umrechnung einer Zahl in Dezimalsystemschreibweise in binär,oktal,duodezimal und hexadezimal. * * @author (nOrdan) * @version (09.06.2019) */ public class Umrechner { Methoden m = new Methoden(); public static void main(String [] args) { Umrechner u = new Umrechner(); u.inputs(); } private void inputs() { boolean valid1 = false; int zahl = 0; while (valid1 == false) { String input1 = m.userInput("Geben sie eine Zahl in Dezimalschreibweise ein"); m.errorIntInput(input1); try { zahl = m.parseInt(input1); valid1 = true; } catch(Exception e) { m.errorMessage("Invalid user input","Invalid input"); } } umrechnung(zahl); } private void umrechnung(int zahl) { m.informationMessage("10 wird im Duodezimalsystem als A und 11 als B dargestellt","Hinweis"); String binaer = ""; String oktal = ""; String duodezimal = ""; String hexadezimal = ""; int ausgabeZahl = zahl; while (zahl > 0) { int rest = zahl % 2; zahl /= 2; binaer = rest + binaer; } zahl = ausgabeZahl; while (zahl > 0) { int rest = zahl % 8; zahl /= 8; oktal = rest + oktal; } zahl = ausgabeZahl; while (zahl > 0) { int rest = zahl % 12; if (rest < 10) { duodezimal = rest + duodezimal; } else { duodezimal = (char) ('A' + rest - 10) + duodezimal; } zahl /= 12; } zahl = ausgabeZahl; while (zahl > 0) { int rest = zahl % 16; if (rest < 10) { hexadezimal = rest + hexadezimal; } else { hexadezimal = (char) ('A' + rest - 10) + hexadezimal; } zahl /= 16; } m.informationMessage("In Binär entspricht " + ausgabeZahl + " der Zahlenfolge " + binaer + "\n" + "In Oktal entspricht " + ausgabeZahl + " der Zahlenfolge " + oktal + "\n" + "In Duodezimal entspricht " + ausgabeZahl + " der Zahlenfolge " + duodezimal + "\n" + "In Hexadezimal entspricht " + ausgabeZahl + " der Zahlenfolge " + hexadezimal,"Ergebnis"); } }
Die Methoden die ich aus meinem eigenem Methodensammlung package benutzt habe:

public String userInput(String message) { return JOptionPane.showInputDialog(message); } public int parseInt(String input) { return Integer.parseInt(input); } public void errorIntInput(String input) { if (input == null) { System.exit(0); //Drückt der User auf abbrechen wird null zurück gegeben und das Programm wird beendet } else if (input.isEmpty() == true) { //continue; wenn nötig } } public void errorMessage(String message,String errorName) { JOptionPane.showMessageDialog(null,message,errorName,JOptionPane.ERROR_MESSAGE); } public void informationMessage(String message,String informationName) { JOptionPane.showMessageDialog(null,message,informationName,JOptionPane.INFORMATION_MESSAGE); }

import java.util.*; public class verschZahlen { public static void main (String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("Zahl eingeben:\t"); int zahl = scanner.nextInt(); bin(zahl); oktal(zahl); hex(zahl); scanner.close(); } public static void bin(int zahl) { String dual = ""; while(zahl > 0) { dual += zahl % 2; zahl /= 2; } String ausgabe = ""; for(int i = dual.length()-1; i >= 0; i--) { ausgabe += dual.charAt(i); } System.out.println("Binär: " + ausgabe); } public static void oktal(int zahl) { String okt = ""; while(zahl > 0) { okt += zahl % 8; zahl /= 8; } String ausgabe = ""; for(int i = okt.length()-1; i >= 0; i--) { ausgabe += okt.charAt(i); } System.out.println("Oktal: " + ausgabe); } public static void hex(int zahl) { String hex = ""; while(zahl > 0) { int temp = zahl % 16; switch(temp) { case 10: hex += "A"; break; case 11: hex += "B"; break; case 12: hex += "C"; break; case 13: hex += "D"; break; case 14: hex += "E"; break; case 15: hex += "F"; break; default: hex += temp; break; } zahl /= 16; } String ausgabe = ""; for(int i = hex.length()-1; i >= 0; i--) { ausgabe += hex.charAt(i); } System.out.println("Hexadezimal: " + ausgabe); } }

import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextField; public class ZahlenSysteme { public static void main(String[] args) { FrZahlenSysteme frZahlenSysteme = new FrZahlenSysteme("Umrechnung von Zahlensystemen"); } } class FrZahlenSysteme extends JFrame implements ActionListener { JLabel lbEingabe = new JLabel("Zahl eingeben: "); JTextField tfEingabe = new JTextField(21); JButton bOK = new JButton(" OK "); JLabel lbBinaer = new JLabel("binaer: "); JTextField tfBinaer = new JTextField(21); JLabel lbOktal = new JLabel("oktal: "); JTextField tfOktal = new JTextField(21); JLabel lbHexadezimal = new JLabel("hexadezimal: "); JTextField tfHexadezimal = new JTextField(21); JPanel pEingabe = new JPanel(); JPanel pOK = new JPanel(); JPanel pBinaer = new JPanel(); JPanel pOktal = new JPanel(); JPanel pHexadezimal = new JPanel(); FrZahlenSysteme(String titel) { super(titel); setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(300, 300, 420, 420); setMinimumSize(new Dimension(380, 400)); setLayout(new GridLayout(5, 1)); tfEingabe.setHorizontalAlignment(JTextField.RIGHT); tfBinaer.setHorizontalAlignment(JTextField.RIGHT); tfOktal.setHorizontalAlignment(JTextField.RIGHT); tfHexadezimal.setHorizontalAlignment(JTextField.RIGHT); tfBinaer.setEditable(false); tfOktal.setEditable(false); tfHexadezimal.setEditable(false); pEingabe.setLayout(new FlowLayout(FlowLayout.RIGHT, 30, 10)); pOK.setLayout(new FlowLayout(FlowLayout.RIGHT, 30, 10)); pBinaer.setLayout(new FlowLayout(FlowLayout.RIGHT, 30, 10)); pOktal.setLayout(new FlowLayout(FlowLayout.RIGHT, 30, 10)); pHexadezimal.setLayout(new FlowLayout(FlowLayout.RIGHT, 30, 10)); pEingabe.add(lbEingabe); pEingabe.add(tfEingabe); pOK.add(bOK); pBinaer.add(lbBinaer); pBinaer.add(tfBinaer); pOktal.add(lbOktal); pOktal.add(tfOktal); pHexadezimal.add(lbHexadezimal); pHexadezimal.add(tfHexadezimal); add(pEingabe); add(pOK); add(pBinaer); add(pOktal); add(pHexadezimal); bOK.addActionListener(this); tfEingabe.addActionListener(this); } public void berechneZahl(String stEingabe) { StringBuilder sbBinaer = new StringBuilder(); StringBuilder sbOktal = new StringBuilder(); StringBuilder sbHexadezimal = new StringBuilder(); int dezimal; int binaer; int oktal; int hexadezimal; boolean plus = true; try { dezimal = Integer.parseInt(stEingabe); if (dezimal == 0) { tfBinaer.setText("0"); tfOktal.setText("0"); tfHexadezimal.setText("0"); } else { if (dezimal < 0) { dezimal = dezimal * (-1); plus = false; } binaer = oktal = hexadezimal = dezimal; while (binaer != 0) { if (binaer % 2 == 0) { sbBinaer.append(0); binaer = binaer / 2; } else { sbBinaer.append(1); binaer = (binaer - 1) / 2; } while (oktal != 0) { if (oktal % 8 == 0) { sbOktal.append(0); oktal = oktal / 8; } else { sbOktal.append(oktal % 8); oktal = (oktal - oktal % 8) / 8; } } while (hexadezimal != 0) { if (hexadezimal % 16 == 0) { sbHexadezimal.append(0); hexadezimal = hexadezimal / 16; } else { if (hexadezimal % 16 <= 10) { sbHexadezimal.append(hexadezimal % 16); } else if (hexadezimal % 16 == 10) { sbHexadezimal.append('A'); } else if (hexadezimal % 16 == 11) { sbHexadezimal.append('B'); } else if (hexadezimal % 16 == 12) { sbHexadezimal.append('C'); } else if (hexadezimal % 16 == 13) { sbHexadezimal.append('D'); } else if (hexadezimal % 16 == 14) { sbHexadezimal.append('E'); } else if (hexadezimal % 16 == 15) { sbHexadezimal.append('F'); } hexadezimal = (hexadezimal - hexadezimal % 16) / 16; } } } sbBinaer.reverse(); sbOktal.reverse(); sbHexadezimal.reverse(); if (plus == true) { tfBinaer.setText(sbBinaer.toString()); tfOktal.setText(sbOktal.toString()); tfHexadezimal.setText(sbHexadezimal.toString()); } if (plus == false) { tfBinaer.setText("-" + sbBinaer.toString()); tfOktal.setText("-" + sbOktal.toString()); tfHexadezimal.setText("-" + sbHexadezimal.toString()); } } } catch (NumberFormatException e) { tfBinaer.setText("Ganze Zahl eingeben bis 2.000.000.000!"); tfOktal.setText(""); tfHexadezimal.setText(""); } } @Override public void actionPerformed(ActionEvent evt) { berechneZahl(tfEingabe.getText()); } }