Java :: Aufgabe #67 :: Lösung #4

4 Lösungen Lösungen öffentlich
#67

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:

Konsolenausgabe:


Zahl eingeben: 365

binär: 101101101
oktal: 555
hexadezimal: 16D
#4
vote_ok
von kollar (340 Punkte) - 05.01.2020 um 07:45 Uhr
Quellcode ausblenden Java-Code
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());

	}
}

Kommentare:

Für diese Lösung gibt es noch keinen Kommentar

Bitte melden Sie sich an um eine Kommentar zu schreiben.
Kommentar schreiben