# Addieren ?



## Guest (30. Mai 2006)

Hallo,

ich brauch mal ganz dringend eure Hilfe ;-)

Folgendes Problem.

Addition mehrerer Zahlen. Eingabe jeweilss in einem beliebigen Zahlenformat.
- Dualzahl vorrangestell b
- Oktal vorrangestellt o
- Dezimal vorrangestellt d
- Hex vorrangestellt h

sprich ich gebe h17f und h12 ein soll ds progi die zahlen addieren.

soweit hab ich nachfolgenden Quelltext, wo mir noch die entsprechende Methode fehlt.


```
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/**
 * Programm: 	Zahlenwandler
 * @version:	1.0 
 * @author 		Andreas Harms
 * Datum: 		30.05.2006
 */
public class Zahlenwandler 
{
	// main Methode
	public static void main(String[] args) 
	
	{
			
		//Datenstrom öffnen
		BufferedReader ein = new BufferedReader(new InputStreamReader(System.in));
		//Variablen deklarieren
		int auswahl=0,auswahlUmwandeln=0;
		boolean exit=false;
		
		//Schleife für´s Hauptprogramm
		do
		{
		// Variable zurücksetzen
		auswahlUmwandeln = 0;
		//Hauptmenü
		System.out.println("-------------------------------------------------------------");
		System.out.println("Zahlenwandler Version 1.0 @ Andreas Harms");
		System.out.println("-------------------------------------------------------------");
		System.out.println("");
		System.out.println("Bitte Wählen Sie:");
		System.out.println("");
		System.out.println("(1)	Zahlen umwandeln");
		System.out.println("");
		System.out.println("(2)	Zahlen addieren");
		System.out.println("");
		System.out.println("(3)	Programmende");
		
		// Eingabe der Auswahl mit übergabe an Variable und Fehlerunterdrückung 
		try
		{
			auswahl = Integer.parseInt(ein.readLine());
		}
			catch (NumberFormatException e)
		{
			System.out.println("Falsche Eingabe !!!");
		}
			catch (IOException e)
		{
			System.out.println("Falsche Eingabe !!!");
		}
			// Variable Exit auf true
			if (auswahl == 3)
			{
				exit = true;
			}
			// Menü Zahlen umwandeln
			if (auswahl == 1)
		{
			System.out.println("-------------------------------------------------------------");
			System.out.println("Zahlen umwandeln");
			System.out.println("-------------------------------------------------------------");
			System.out.println("");
			System.out.println("(1)	Dualzahl in Dezimal-,Oktal-,Hexadezimalzahl");
			System.out.println("");
			System.out.println("(2)	Dezimalzahl in Dual-,Oktal-,Hexadezimalzahl");
			System.out.println("");
			System.out.println("(3)	Oktalzahl in Dual-,Dezimal-,Hexadezimalzahl");
			System.out.println("");
			System.out.println("(4)	Hexadezimalzahl in Dual-,Oktal-,Dezimalzahl");
			
			//Eingabe der Auswahl mit übergabe an Variable und Fehlerunterdrückung
			try
			{
				auswahlUmwandeln = Integer.parseInt(ein.readLine());
			}
			catch (NumberFormatException e)
			{
				System.out.println("Falsche Eingabe !!!");
			}
			catch (IOException e)
			{
				System.out.println("Falsche Eingabe !!!");
			}
		}
			// Aufrufen der Methode f50 "Addition"
			if (auswahl == 2)
		{
			f50();
		}
			// Aufrufen der Methoden
			switch (auswahlUmwandeln) 
		{
			case 1:
			{ 
				f10();
			}
			break;
			case 2:
			{
				f20();
			}
			break;
			case 3:
			{	
				f30();
			}	
			break;
			case 4:
			{
				f40();
			}
			break;
		}
		}
		while (exit==false);
	}
	
	// Methode Dualzahl in Dezimal-,Oktal-,Hexadezimalzahl
	public static void f10()
	
	{
		// Datenstrom öffnen
		BufferedReader ein = new BufferedReader(new InputStreamReader(System.in));
		// Variablen deklarieren
		int zahl=0;
		String eingabe = "";
		//Eingabeaufforderung
		System.out.println("-------------------------------------------------------------");
		System.out.println("Dualzahl in Dezimal-,Oktal-,Hexadezimalzahl");
		System.out.println("-------------------------------------------------------------");
		System.out.println("");
		System.out.println("Geben Sie die umzuwandelnde Dualzahl ein");
		//Eingabe der umzuwandelnde Zahl mit übergabe an Variable und Fehlerunterdrückung
		try
		{
			eingabe = ein.readLine();
		}
		catch (NumberFormatException e)
		{
			System.out.println("Falsche Eingabe !!!");
		}
		catch (IOException e)
		{
			System.out.println("Falsche Eingabe !!!");
		}
		// Ausgabe Ergebnisse
		zahl = Integer.parseInt(eingabe, 2);
		System.out.println("Eingegebene Dualzahl = "+eingabe );
		System.out.println("");
		System.out.println("Dezimal = "+Integer.toString(zahl));
		System.out.println("");
		System.out.println("Hexadezimal = "+Integer.toHexString(zahl));
		System.out.println("");
		System.out.println("Oktal = "+Integer.toOctalString(zahl));
		
	}
	
	public static void f20()
	
	{
		// Datenstrom öffnen
		BufferedReader ein = new BufferedReader(new InputStreamReader(System.in));
		// Variablen deklarieren
		int zahl=0;
		String eingabe = "";
		// Eingabeaufforderung
		System.out.println("-------------------------------------------------------------");
		System.out.println("Dezimal in Dual-,Oktal-,Hexadezimalzahl");
		System.out.println("-------------------------------------------------------------");
		System.out.println("");
		System.out.println("Geben Sie die umzuwandelnde Dezimalzahl ein");
		// Eingabe der umzuwandelnde Zahl mit übergabe an Variable und Fehlerunterdrückung
		try
		{
			eingabe = ein.readLine();
		}
		catch (NumberFormatException e)
		{
			System.out.println("Falsche Eingabe !!!");
		}
		catch (IOException e)
		{
			System.out.println("Falsche Eingabe !!!");
		}
		// Ausgabe Ergebnisse
		zahl = Integer.parseInt(eingabe, 10);
		System.out.println("Eingegebene Dezimalzahl = "+eingabe );
		System.out.println("");
		System.out.println("Dual = "+Integer.toBinaryString(zahl));
		System.out.println("");
		System.out.println("Hexadezimal = "+Integer.toHexString(zahl));
		System.out.println("");
		System.out.println("Oktal = "+Integer.toOctalString(zahl));
	}
	
	public static void f30()
	
	{
		// Datenstrom öffnen
		BufferedReader ein = new BufferedReader(new InputStreamReader(System.in));
		// Variablen deklarieren 		
		int zahl=0;
		String eingabe = "";
		// Eingabeaufforderung
		System.out.println("-------------------------------------------------------------");
		System.out.println("Oktal in Dual-,Dezimal-,Hexadezimalzahl");
		System.out.println("-------------------------------------------------------------");
		System.out.println("");
		System.out.println("Geben Sie die umzuwandelnde Oktalzahl ein");
		// Eingabe der umzuwandelnde Zahl mit übergabe an Variable und Fehlerunterdrückung
		try
		{
			eingabe = ein.readLine();
		}
		catch (NumberFormatException e)
		{
			System.out.println("Falsche Eingabe !!!");
		}
		catch (IOException e)
		{
			System.out.println("Falsche Eingabe !!!");
		}
		// Ausgabe Ergebnisse
		zahl = Integer.parseInt(eingabe, 8);
		System.out.println("Eingegebene Oktalzahl = "+eingabe );
		System.out.println("");
		System.out.println("Dual = "+Integer.toBinaryString(zahl));
		System.out.println("");
		System.out.println("Hexadezimal = "+Integer.toHexString(zahl));
		System.out.println("");
		System.out.println("Dezimal = "+Integer.toString(zahl));
	}
	
	public static void f40()
	
	{
		// Datenstrom öffnen 
		BufferedReader ein = new BufferedReader(new InputStreamReader(System.in));
		// Variablen deklarieren
		int zahl=0;
		String eingabe = "";
		// Eingabeaufforderung
		System.out.println("-------------------------------------------------------------");
		System.out.println("Hexadezimal in Dual-,Oktal-,Dezimalzahl");
		System.out.println("-------------------------------------------------------------");
		System.out.println("");
		System.out.println("Geben Sie die umzuwandelnde Hexadezimalzahl ein");
		// Eingabe der umzuwandelnde Zahl mit übergabe an Variable und Fehlerunterdrückung
		try
		{
			eingabe = ein.readLine();
		}
		catch (NumberFormatException e)
		{
			System.out.println("Falsche Eingabe !!!");
		}
		catch (IOException e)
		{
			System.out.println("Falsche Eingabe !!!");
		}
		// Ausgebe Ergebnisse
		zahl = Integer.parseInt(eingabe, 16);
		System.out.println("Eingegebene Hexadezimalzahl = "+eingabe );
		System.out.println("");
		System.out.println("Dual = "+Integer.toBinaryString(zahl));
		System.out.println("");
		System.out.println("Dezimal = "+Integer.toString(zahl));
		System.out.println("");
		System.out.println("Oktal = "+Integer.toOctalString(zahl));
	}
	
	public static void f50()
	{
		
		System.out.println("-------------------------------------------------------------");
		System.out.println("Zahlen addieren");
		System.out.println("-------------------------------------------------------------");
	}
	
	
	
}
```


Danke für eure Hilfe


----------



## Jockel (30. Mai 2006)

Kleiner Tipp am Rande: bei "f10()" habe ich aufgehört den Quelltext zu überfliegen.


----------



## Guest (30. Mai 2006)

ab f50 wirds erst wichti  :wink:


----------



## Jockel (30. Mai 2006)

Was ich damit sagen wollte: jemand der solche Methoden-Namen auswählt, gehört öffentlich gesteinigt.

Ehrlich gesagt verstehe ich dein Problem nicht so ganz, wenn du den Rest schon alleine gemacht hast (/haben solltest).

Zahl als String einlesen, überprüfen welcher Buchstabe an erster Stelle steht, damit du weißt, welches Format der User eingegeben hat, dann den Rest des Strings in eine Zahl konvertieren, das Ganze nochmal mit der zweiten Zahl machen, beide addieren und voila, fertig. 
Fehlte jetzt nur ein Gedankenanstoss oder wo mangelt es?

[edit]
achja, alles auf 'public static' zu setzen ist auch nicht sonderlich schön


----------



## Gast (30. Mai 2006)

ja habs selbst geschrieben...das mit den methoden hab ich noch nicht so ganz geraft ;-)
mein prob ist die ganze methode zu schreiben....stehe irgendwie auf dem schlauch


----------



## lhein (31. Mai 2006)

Tut zwar nichts zu Deinem Problem, aber: 

*Tu Dir und anderen einen Gefallen und verwende sprechende Namen für Variablen, Methoden und Klassen. Damit steigert sich die Lesbarkeit und die Verständlichkeit Deines Codes ungemein.*

lr


----------



## mattulla (31. Mai 2006)

Gast hat gesagt.:
			
		

> ja habs selbst geschrieben...das mit den methoden hab ich noch nicht so ganz geraft ;-)
> mein prob ist die ganze methode zu schreiben....stehe irgendwie auf dem schlauch



Wieso denn *die* ganze Methode im Prinzip brauchst du doch 5 Methoden oder so wenn ich das Richtig ueberblicke:

- public double wandleZahl(String eingabe)
- public double dualToDezimal(String eingabe)
- public double oktalToDezimal(String eingabe)
- public double hexToDezimal(String eingabe)

in der Methode wandleZahl pruefst du um welche Zahl es sich handelt und rufst entsprechend eine der anderen 3 Methoden auf.

Hinzu kommt halt deine main-Methode....sie ist wohl noch die einfachste von allen

```
public static void main(String args)
{
    EingabeDerErstenZahl;
    EingabeDerZweitenZahl;
    double ergebnis = wandleZahl(ersteEingabe) + wandleZahl(zweiteEingabe);
    System.out.println(ergebnis);
}
```


----------

