# Java Arbeit - Währungskalkulator



## weeklygirl (29. Dez 2014)

Guten Tag

Nun ich hatte letzte Woche eine Vorlesung un da haben wir  Themen wie Interfaces und die Superklassen angeschaut. Im Anschluss erhielten wir eine Aufgabenstellung die mich total überfordert. Da ich zur Zeit noch mit den verschiedenen Variablentypen zu schaffen habe. Nichtsdestotrotz muss ich mich dieser Arbeit annehmen. Ich werde versuchen diese Stück für stück zu erarbeiten und bin froh wenn Verarbeitungsmöglichketen und Ideen des Aufbaus genannt werden... Denn damit habe ich gerade am meisten mühe. Ich werde mal zu beginn einen Konstruktor schreiben und Uploaden . 

Nun denn dies ist ein LInk zu der Aufgabenstellung:
https://www.dropbox.com/s/qly3vqw7u3irma2/JAVA Arbeit.pdf?dl=0

Und für die die nicht auf den Link Klicken mögen hier die Aufgabenstellung:

*Titel Währungskalkulator*
Gegeben ist die folgende Klasse Euro, die die gleichnamige Währung repräsentiert:

```
/** Die Waehrung Europas */
public class Euro
extends Waehrung
{
// eine abstrakte Klasse Waehrung
// ist zu erstellen

/** Instanzvariable: Wert in Euro */
private double wert;

/** Konstruktor */
public Euro(double wert) {
this.wert = wert;
}

/** Deklaration der sonst
abstrakten Methode euroBetrag
Gibt den Wert der Waehrung in Euro zurueck */

public double euroBetrag() {
return wert;
}
}
```

Aufgrund der früheren Währungsunion konnten eine Vielzahl Währungen (wie etwa DM, Lire
oder Franc) durch den Euro ausgedrückt werden. Die festgeleg
ten Wechselkurse entnehmen Sie folgender Tabelle

Währung               Ein Euro kostet...
DM                             1,95583
Lire                             1936,27
Franc                          6,55957

Schreiben Sie drei Klassen *DM*, *Lire *und *Franc*, die sich wie folgt von der Klasse *Euro *ableiten: 

a) Schreiben Sie einen Konstruktor, der als Argument einen Geldbetrag in der ent-sprechenden Währung erhält. Verwenden Sie den Konstruktor der Superklasse Euro, indem sie diesen in folgender Form aufrufen: 

    super(x); 
x steht hier für den Wert des Geldbetrages in Euro (vgl. auch Abschnitt d)). 

b) Schreiben Sie einen Konstruktor, der statt des double -Arguments eine Instanz der Klasse Euro erhält. Verwenden Sie erneut den Konstruktor der Superklasse und die Methode euroBetrag, um die Aufgabe zu bewältigen. 

c) Schreiben Sie eine Methode waehrungsBetrag(), die den Wert des Geldbetrages in der eigentlichen Währung ausgibt. Rechnen Sie hierzu den über die Methode euroBetrag gegebenen Wert anhand der Formeln aus der Tabelle um. 

Hinweis: Die Klassen DM, Lire und Franc benötigen keinerlei neue Klassen- oder Instanzvariablen. 

d) Verwenden Sie nun die Klassen DM, Lire und Franc, um einen Währungskalkulator zu schreiben. Das Programm soll einen Geldbetrag in DM einlesen und seinen Wert in Euro, Lire und Franc zurückgeben. 

Hinweis: Denken Sie bei der Programmierung an den letzten Abschnitt in dieser Übungsaufgabe. Ein DM-Objekt kann auch als Euro-Objekt betrachtet werden. Die Zeilen:


```
Euro euro = new DM( dmBetrag ); 
DM dm = new DM( euro ); 
Lire lire = new Lire( euro ); 
Franc franc = new Franc( dm );
```

wären somit vollkommen korrekt.

*Beispiel eines Ablaufs:* 

Bitte einen DM-Betrag eingeben: 100 
in Euro:         51.13 
in Lire:           98999.91 
in Franc:        335.39 

Bitte einen Lire-Betrag eingeben: 98999.91 
in Euro:        51.13 
in DM:          100.00 
in Franc:       335.39 

Bitte einen Franc-Betrag eingeben: 335.39 
in Euro:       51.13 
in Lire:        99001.24 
in DM:        100.00


----------



## Saheeda (30. Dez 2014)

Und wo ist dein eigener Code?


Nur so aus Interesse: in der gehosteten Datei wird noch ne Restaurant-Aufgabe erwähnt. Könntest du mir die bitte schicken?


----------



## weeklygirl (30. Dez 2014)

Saheeda hat gesagt.:


> Und wo ist dein eigener Code?
> 
> 
> Nur so aus Interesse: in der gehosteten Datei wird noch ne Restaurant-Aufgabe erwähnt. Könntest du mir die bitte schicken?



Also mit meinem Teil bin ich nochnicht so weit gekommen. Werde die anderen Aufgaben morgen aufschalten


----------



## weeklygirl (30. Dez 2014)

Also, hier sind die versprochenen zwei weiteren Aufgaben.


----------



## Saheeda (30. Dez 2014)

Ich kann die Anhänge nicht öffnen.


----------



## weeklygirl (30. Dez 2014)

Nun, ich hab um überhaupt zu beginnen, mal einen "Währungsrechner" Konstruktor (als eigene class Waehrungsrechner) erstellt.

```
public class Waehrungsrechner {
	public double kurs;

public Waehrungsrechner(double k){ //Konstruktor 
	kurs = k; //initialisierung Kurs
	}

public double hin(double betrag){
	return betrag*kurs;
	}

public double her(double betrag){
	return betrag / kurs;
	}
}
```

Als nächstes habe ich vor weitere Konstruktoren für die angegebenen Kurse der Währungen zu erstellen, oder? Oder muss ich diese als die gegebene Instanzvariable erstellen?


----------



## weeklygirl (30. Dez 2014)

versuchs nochmals ...


----------



## Saheeda (30. Dez 2014)

Du solltest die Aufgaben der Reihe nach abarbeiten, der eigentliche Währungskalkulator ist die letzte.
Fang mit den Klassen für DM, Lire und Franc an und implementiere sie genau so, wie es in der Aufgabenstellung steht.


----------



## weeklygirl (30. Dez 2014)

also ich mache jetzt die einzelnen Klassen DM, Lire und Franc... und in diese sollen gleich als Umrechner funktionieren so das ich sie in der Superklasse Euro nur abrufen kann.. hab ich das richtig verstanden? (Sorry ich bin echt ne null wenns um Java geht, deswegen überfordert mich diese Aufgabe total)


----------



## Saheeda (30. Dez 2014)

> a) Schreiben Sie einen Konstruktor, der als Argument einen Geldbetrag in der ent-sprechenden Währung erhält. Verwenden Sie den Konstruktor der Superklasse Euro, indem sie diesen in folgender Form aufrufen:
> 
> super(x);
> x steht hier für den Wert des Geldbetrages in Euro (vgl. auch Abschnitt d)).



Der übergebene Wert ist in DM, muss also noch in Euro umgerechnet werden.


```
public DM(double dmWert){
super(dmWert/1.95583);
}
```



> b) Schreiben Sie einen Konstruktor, der statt des double -Arguments eine Instanz der Klasse Euro erhält. Verwenden Sie erneut den Konstruktor der Superklasse und die Methode euroBetrag, um die Aufgabe zu bewältigen.




```
public DM(Euro euro){
super(euro.euroBetrag());
}
```


----------



## weeklygirl (30. Dez 2014)

also ich hab jetzt (und wenn ich mir das anschaue was du mir geschickt hast glaube ich dass ich alles falsch habe) aber ich hab mal das gemacht: 

ich habe 3 verschiedene klassen gemacht für DM, Lire & Franc & eine Klasse Währung und eine als Währungsrechner und zuletzt noch eine als Euro:

```
/** Die deutsche Landeswaehrung */
public class DM extends Waehrung {

  /** Ein DM ist soviel Dollar wert */
  private static double kurs;

  /** Instanzvariable: Wert in DM */
  private double wert;

  /** Konstruktor */
  public DM(double wert) {
    this.wert = wert;
  }

  /** Deklaration der sonst abstrakten Methode euroBetrag */
  public double euroBetrag() {
    return wert*kurs;
  }

  /** Zugriff auf die private Klassenvariable */
  public static void setKurs(double Kurs) {
    kurs=Kurs;
  }

}
______________________________________________________

/** Die italienische Landeswaehrung */
public class Lire extends Waehrung {

  /** Eine Lire ist soviel Dollar wert */
  private static double kurs;

  /** Instanzvariable: Wert in Lire */
  private double wert;

  /** Konstruktor */
  public Lire(double wert) {
    this.wert = wert;
  }

  /** Deklaration der sonst abstrakten Methode euroBetrag */
  public double euroBetrag() {
    return wert*kurs;
  }

  /** Zugriff auf die private Klassenvariable */
  public static void setKurs(double Kurs) {
    kurs=Kurs;
  }

}
__________________________________________________________________
/** Die französische Landeswaehrung */
public class Lire extends Waehrung {

  /** Eine Franc ist soviel Dollar wert */
  private static double kurs;

  /** Instanzvariable: Wert in Franc */
  private double wert;

  /** Konstruktor */
  public Franc(double wert) {
    this.wert = wert;
  }

  /** Deklaration der sonst abstrakten Methode euroBetrag */
  public double euroBetrag() {
    return wert*kurs;
  }

  /** Zugriff auf die private Klassenvariable */
  public static void setKurs(double Kurs) {
    kurs=Kurs;
  }

}
_______________________________________________________

/**Diese Klasse gibt den wert der Objekte (beliebige Währungen) in Euro zurück */

public abstract class Waehrung {
	public abstract double euroBetrag();

}
__________________________________________________________________________
public abstract class Waehrungsrechner {
	public double kurs;

public Waehrungsrechner(double k){ //Konstruktor 
	kurs = k; //initialisierung Kurs
	}

public double hin(double betrag){
	return betrag*kurs;
	}

public double her(double betrag){
	return betrag / kurs;
	}
}
_______________________________________________
/** Die Waehrung Europas */
public abstract class Euro {
	
		public class Euro extends Waehrung { //Währung oder Währungsrechner?
			//eine abstrakte Klasse ist zu erstellen
		}
		
				
		/** Instanzvariable: Wert in Euro */
		private double wert;
		
		/** Konstruktor */
		public Euro(double wert) {
		this.wert = wert;
		}
		
		/** Deklaration der sonst bstrakten	Methode euroBetrag 
		 * gibt den Wert der Waehrung in Euro zurueck */
		public double euroBetrag() {
		return wert;

	}

}
```

nun muss ich alles zusammenbauen... so wie du oben gesagt hast...ich werde im verlauf des Abends posten, und bin weiterhin froh Hilfe etc. zu erhalten  THX überhaupt


----------



## Saheeda (30. Dez 2014)

1. Lire, Franc und DM sollen laut Aufgabe von Euro abgleitet werden, nicht von Währung.
2. Du benutzt die geerbten Methoden und Variablen nicht, sondern definierst in allen Kindklassen neue. Damit ist die komplette Vererbungsreihe sinnlos.
3. Du benutzt nirgendwo "super()", wie in der Aufgabe verlangt.
4. Die innere Klasse in 108-110 ergibt keinen Sinn.
5. In der Währungsrechnerklasse definierst du erneut eine Kurs-Variable. Warum? Und wie/wo/wozu hast du dann Lire, DM und Franc gebaut?


----------



## weeklygirl (30. Dez 2014)

ich hab gerade echt keine ahnung was ich tue... oder wie ich die infos vererben muss


----------



## Saheeda (30. Dez 2014)

Dann solltest du vielleicht nochmal in deine Aufzeichnungen schauen oder Onkel Google befragen:
Vererbung
Tutorial / Java Grundlagen / Vererbung


----------



## weeklygirl (30. Dez 2014)

..


----------



## weeklygirl (30. Dez 2014)

..


----------



## weeklygirl (30. Dez 2014)

Saheeda hat gesagt.:


> Der übergebene Wert ist in DM, muss also noch in Euro umgerechnet werden.
> 
> 
> ```
> ...


----------



## weeklygirl (30. Dez 2014)

Also Nun ist es so dass ich die Klassen und Superklass dazu bringe dass diese mir den Euro Betrag in der gewünschte Währung aufzeigt. Doch eig. sollen die einzelnen Währungen auch aufgezeigt werden. doch wo soll ich diesen Wert herausnehmen? Die Klasse Euro ist Private... das heisst ich kann da nicht zugreifen?
Also hier die Klassen in den Verschiedenen Währungen:

```
/** Die Waehrung Europas */

public class Euro extends Waehrung 
{
	/** Instanzvariable: Wert in Euro */
	private double wert;

	/** Konstruktor */
	public Euro(double wert) 
	{
		this.wert = wert;
	}

	public Euro(Euro euro)
	{
		this.wert = euro.wert;
	}
	
	/**
	 * Deklaration der onst bstrakten Methode euroBetrag gibt den Wert der
	 * Waehrung in Euro zurueck
	 */
	public double euroBetrag() 
	{
		return wert;
	}

}
```


```
/** Die deutsche Landeswaehrung */
public class DM extends Euro 
{
	/** Instanzvariable: Wert in DM */
	private double wert;

	/** Konstruktor */
	public DM(double wert) 
	{
		super(wert/kursdm);
		this.wert = wert;
	}

	public DM(Euro euro) 
	{
		super(euro);
		this.wert = euro.euroBetrag() * kursdm;
	}

	/** Deklaration der sonst abstrakten Methode euroBetrag */
	public double waehrungsBetrag() 
	{
		return wert;
	}
}
```


```
/** Die italienische Landeswaehrung */
public class Lire extends Euro 
{
	/** Instanzvariable: Wert in lire */
	private double wert;

	/** Konstruktor */
	public Lire(double wert) 
	{
		super(wert/kurslire);
		this.wert = wert;
	}

	public Lire(Euro euro) 
	{
		super(euro);
		this.wert = euro.euroBetrag() * kurslire;
	}

	/** Deklaration der sonst abstrakten Methode euroBetrag */
	public double waehrungsBetrag() 
	{
		return wert;
	}
}
```


```
/** Die französische Landeswaehrung */
public class Franc extends Euro 
{
	/** Instanzvariable: Wert in franc */
	private double wert;

	/** Konstruktor */
	public Franc(double wert) 
	{
		super(wert/kursfranc);
		this.wert = wert;
	}

	public Franc(Euro euro)
	{
		super(euro);
		this.wert = euro.euroBetrag() * kursfranc;
	}

	/** Deklaration der sonst abstrakten Methode euroBetrag */
	public double waehrungsBetrag() 
	{
		return wert;
	}
}
```

Hier die Klasse Währung:

```
/**Diese Klasse gibt den wert der Objekte (beliebige Währungen) in Euro zurück */

public abstract class Waehrung {
	
		double wert;	
		static double kursdm = 1.95583;
		static double kurslire = 1936.27;
		static double kursfranc = 6.55957;
		static double kurseuro = 1;
		public abstract double euroBetrag();

}
```

Und die TestMain:

```
import java.util.Scanner;

public class Test 
{
	public static Scanner scanner = new Scanner(System.in);
	
	public static void main(String[] args) 
	{
		System.out.print("Bitte geben Sie einen DM Betrag ein: ");
		double dmWert = scanner.nextInt();
		
		DM dm = new DM(dmWert);
		
		System.out.println("Wärt von DM: " + dm.waehrungsBetrag() + "\nin Euro: " + dm.euroBetrag() + "\nin Lire: " + dm );
		
		Euro euro = new DM(500);
		DM d3m = new DM(euro);
		Lire lire = new Lire(euro);
		Franc franc = new Franc(dm);
	}
}
```

Ich bin für jegliche Hilfe Dankbar.


----------



## Saheeda (31. Dez 2014)

Meine Meinung nach brauchst du die Variable "wert" in den Klassen Lire, Franc und DM nicht. Ich hätte es so gelöst:




```
public class DM extends Euro {
	
	private final static double factor = 1.95583; 
	
	public DM(double wert) {
		super(wert/factor);		
	}	
	
	public DM(Euro euro){
		super(euro.euroBetrag());
	}

	public double waehrungsBetrag(){
		return super.euroBetrag()*factor;
	}
	

}
```

Den Rest deines letzten Postings verstehe ich nicht. Euro ist public, nicht privat. Und was willst du woher nehmen?


----------

