Java Arbeit - Währungskalkulator

weeklygirl

Mitglied
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:
Java:
/** 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:

Java:
 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

Top Contributor
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

Mitglied
Also, hier sind die versprochenen zwei weiteren Aufgaben.
 

Anhänge

  • PRG Java - Holzplatten.jpg
    PRG Java - Holzplatten.jpg
    149 KB · Aufrufe: 27
  • PRG Java - Restaurant.jpg
    PRG Java - Restaurant.jpg
    150,4 KB · Aufrufe: 27
Zuletzt bearbeitet:

weeklygirl

Mitglied
Nun, ich hab um überhaupt zu beginnen, mal einen "Währungsrechner" Konstruktor (als eigene class Waehrungsrechner) erstellt.
Java:
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?
 
Zuletzt bearbeitet:

weeklygirl

Mitglied
versuchs nochmals ...
 

Anhänge

  • PRG Java - Holzplatten.jpg
    PRG Java - Holzplatten.jpg
    149 KB · Aufrufe: 25
  • PRG Java - Restaurant.jpg
    PRG Java - Restaurant.jpg
    150,4 KB · Aufrufe: 23
Zuletzt bearbeitet:

Saheeda

Top Contributor
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

Mitglied
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

Top Contributor
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.

Java:
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.

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

weeklygirl

Mitglied
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:
Java:
/** 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

Top Contributor
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?
 
Zuletzt bearbeitet:

weeklygirl

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

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


Der Wert als Wert wird ja übernommen (vererbt) aus welchem Grund machst du einen " dmWert" daraus (wenn es doch schon vererbt wurde?

EDIT: Alles klar, habs verstanden
 
Zuletzt bearbeitet:

weeklygirl

Mitglied
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:
Java:
/** 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;
	}

}

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

Java:
/** 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:
Java:
/**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:
Java:
 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

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



Java:
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?
 

Neue Themen


Oben