Java :: Aufgabe #67

4 Lösungen Lösungen öffentlich

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

Lösungen:

vote_ok
von ElPapito (2690 Punkte) - 05.05.2015 um 01:01 Uhr
Quellcode ausblenden Java-Code

/**
 * @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;
	}

}

vote_ok
von nOrdan (1160 Punkte) - 09.06.2019 um 20:22 Uhr
Anmerkung: Habe noch Duodezimal hinzugefügt

Main-Klasse:

Quellcode ausblenden Java-Code


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:

Quellcode ausblenden Java-Code

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);
    }

vote_ok
von paddlboot (3970 Punkte) - 10.07.2019 um 09:50 Uhr
Quellcode ausblenden Java-Code
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);
	}
}
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());

	}
}