Sitzung: Jeden Freitag in der Vorlesungszeit ab 16 Uhr c. t. im MAR 0.005. In der vorlesungsfreien Zeit unregelmäßig (Jemensch da?). Macht mit!

Javakurs/Übungsaufgaben/Zahlenumrechner/Musterloesung

< Javakurs‎ | Übungsaufgaben‎ | Zahlenumrechner
Version vom 4. März 2013, 18:53 Uhr von MarkusH (Diskussion | Beiträge) (fix alignment)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

Hinweis: Die Musterlösung kann von eurer Lösung abweichen, da es immer mehrere Varianten gibt ein Problem zu lösen. Im Zweifelsfall Fragt einen Tutor.

Lösung

/**
 * @author Andy Gunschl (Freitagsrunde)
 * 
 *         Eure Lösung kann gut von unserer Abweichen und es gibt bestimmt auch
 *         schönere Lösungen.
 * 
 */
public class NumberConverter {
	static char[] hexTabelle = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };

	public static void main(String[] args) {
		System.out.println("----- SELF CHECK like BVG ;-) -----");

		System.out.println("dez: 52 --> binaer: " + dezimalNachBinaer(52));
		System.out.println("dez: 654 --> hexadezimal: " + dezimalNachHexadezimal(654));
		System.out.println("binaer: 110100 --> dez: " + binaerNachDezimal("110100"));
		System.out.println("hexadezimal: 28E --> dez: " + HexadezimalNachDezimal("28E"));

		System.out.println("----- Menu -----");
		System.out.println("Options:");
		System.out.println("\t[1] decimal to binary");
		System.out.println("\t[2] decimal to hexadecimal");
		System.out.println("\t[3] binary to decimal");
		System.out.println("\t[4] hexadecimal to decimal");
		System.out.println("choose a option: ");
		int option = Integer.parseInt(System.console().readLine());
		System.out.println("type value to convert: ");
		String value = System.console().readLine();

		switch (option) {
			case 1:
				System.out.println("Result: " + dezimalNachBinaer(Integer.valueOf(value)));
				break;
			case 2:
				System.out.println("Result: " + dezimalNachHexadezimal(Integer.valueOf(value)));
				break;
			case 3:
				System.out.println("Result: " + binaerNachDezimal(value));
				break;
			case 4:
				System.out.println("Result: " + HexadezimalNachDezimal(value));
				break;
			default:
				System.out.println("No valid option");
		}
	}

	public static String dezimalNachBinaer(int dezimal) {
		String binaer = "";
		while (dezimal > 0) {
			if (dezimal % 2 == 0) {
				binaer = "0" + binaer;
			}
			if (dezimal % 2 == 1) {
				binaer = "1" + binaer;
			}
			dezimal = dezimal / 2;
		}
		return binaer;
	}

	/*
	 * Diese Funktion ist bestimmt auch noch schöner zu lösen
	 */
	public static String dezimalNachHexadezimal(int dezimal) {
		String hex = "";
		while (dezimal > 0) {
			hex = hexTabelle[dezimal % 16] + hex;
			dezimal = dezimal / 16;
		}
		return hex;
	}

	public static int binaerNachDezimal(String binaer) {
		int dezimal = 0;
		char[] tokens = binaer.toCharArray();
		// vorsicht wir muessen von hinten anfangen 2^0 usw.
		double pow = 0;
		for (int i = (tokens.length - 1); i >= 0; i--) {
			dezimal = dezimal
					+ (Integer.parseInt(String.valueOf(tokens[i])) * (int) Math
							.pow(2, pow));
			pow++;
		}
		return dezimal;
	}

	public static int HexadezimalNachDezimal(String hex) {
		int dezimal = 0;
		char[] tokens = hex.toCharArray();
		// vorsicht wir muessen von hinten anfangen 16^0 usw.
		double pow = 0;
		for (int i = (tokens.length - 1); i >= 0; i--) {
			int mul = 0;
			for (int j = 0; j < hexTabelle.length; j++) {
				if (hexTabelle[j] == tokens[i]) {
					mul = j;
					break; // das break ist hier nicht schön aber somit
							// vermeidet man dass das gesammte array durchlaufen
							// wird da ja hier etwas passendes gefunden wurde
				}
			}
			dezimal = dezimal + (mul * (int) Math.pow(16, pow));
			pow++;
		}
		return dezimal;
	}
}

Kommentare

Wenn du Anmerkungen zur Aufgabe hast oder Lob und Kritik loswerden möchtest, ist hier die richtige Stelle dafür. Klicke einfach ganz rechts auf "bearbeiten" und schreibe deinen Kommentar direkt ins Wiki. Keine Scheu, es geht nichts kaputt ;)