Hallo, ich hab mal wieder ein Problem und weiß nicht weiter, hoffentlich kann mir jemand helfen.
Die Aufgabenstellung:
Ändere folgendes UML-Diagramm so um, dass es dem Strategy-Pattern enstspricht und implementiere dann dieses.Die abstrakte Klasse Calculator hat die Aufgabe, Werte aus einer Liste mit einem modifier zu verändern und das Ergebnis als neue Liste zurück zu geben. Dazu dient die abstrakte Methode processCalculations, die in den konkreten Subklassen so überschrieben wurde, dass sie je nach Klasse die Werte aus der Liste mit dem modifier addiert, subtrahiert, multipliziert oder dividiert.
Das ganze Beispiel hab ich ganz leicht lösen können, jedoch ohne Liste. So wie ich das verstanden habe, sind Zahlen in der Liste und der Modifier ist ebenfalls eine Zahl, die mit allen Elementen addiert, subtrahiert, multipliziert bzw dividiert wird.
Lösung ohne Liste(Zur Übersicht hier nur die Addition dabei):
Lösung daweil mit Liste:
Meine Frage ist jetzt, wie ich die einzelnen Elementen in der Liste mit dem modifer addieren, subtrahieren, multiplizieren bzw dividieren kann, so wie im ersten Beispiel und wie ich die berechnete Liste zurückgeben kann.
Ich hoffe es kann mir wer helfen,
vielen dank im Voraus.
Die Aufgabenstellung:
Ändere folgendes UML-Diagramm so um, dass es dem Strategy-Pattern enstspricht und implementiere dann dieses.Die abstrakte Klasse Calculator hat die Aufgabe, Werte aus einer Liste mit einem modifier zu verändern und das Ergebnis als neue Liste zurück zu geben. Dazu dient die abstrakte Methode processCalculations, die in den konkreten Subklassen so überschrieben wurde, dass sie je nach Klasse die Werte aus der Liste mit dem modifier addiert, subtrahiert, multipliziert oder dividiert.
Das ganze Beispiel hab ich ganz leicht lösen können, jedoch ohne Liste. So wie ich das verstanden habe, sind Zahlen in der Liste und der Modifier ist ebenfalls eine Zahl, die mit allen Elementen addiert, subtrahiert, multipliziert bzw dividiert wird.
Lösung ohne Liste(Zur Übersicht hier nur die Addition dabei):
Java:
public class Addition implements Operationen{
/**
* Addition
*/
public double berechne(double a, double b){
return a+b;
}
}
Java:
public class Calculator {
private Operationen rechenart;
private double anzeigewert;
/**
* Konstruktor
*/
public Calculator()
{
}
/**
* Setzt die Werte a und b
*/
public void berechne(double a, double b)
{
anzeigewert = rechenart.berechne(a, b);
}
/**
* Gibt den anzeigewert zurück
* @return anzeigewert
*/
public double gibAnzeigewert()
{
return anzeigewert;
}
/**
* Setzten der Strategie
* @param rechenart STrategie
*/
public void setzeRechenverhalten(Operationen rechenart)
{
this.rechenart = rechenart;
}
}
}
Java:
public interface Operationen {
public double berechne(double a, double b);
}
Java:
public class TesteCalc {
public static void main(String[]args){
Calculator rechner = new Calculator();
// Addition
rechner.setzeRechenverhalten(new Addition());
rechner.berechne(5.0, 7.0);
System.out.println("Ergebnis: "+rechner.gibAnzeigewert());
// Subtraktion
rechner.setzeRechenverhalten(new Subtraktion());
rechner.berechne(10.0, 3.0);
System.out.println("Ergebnis: "+rechner.gibAnzeigewert());
// Division
rechner.setzeRechenverhalten(new Division());
rechner.berechne(10.0,5.0);
System.out.println("Ergebnis: "+rechner.gibAnzeigewert());
// Multiplikation
rechner.setzeRechenverhalten(new Multiplikation());
rechner.berechne(10.0, 5.0);
System.out.println("Ergenis: "+rechner.gibAnzeigewert());
}
}
Lösung daweil mit Liste:
Java:
import java.util.ArrayList;
public class Addition implements Operationen {
public ArrayList<Double> processCalculations(double modifier, ArrayList<Double> values){
for (int i = 0; i < values.size(); i++ ){
double b=values.get(0)+modifier;
values.add(b);
}
return values;
}
}
Java:
import java.util.ArrayList;
public interface Operationen {
public ArrayList<Double> processCalculations(double modifier, ArrayList<Double> values);
}
Java:
public class Rechner {
private Operationen op;
private double modifier;
private ArrayList<Double> values = new ArrayList<Double>();
public Rechner(){
}
public void addValue(double value){
values.add(value);
}
public void setModifier(double modifier){
modifier=this.modifier;
}
public void removeValue(double value){
values.remove(value);
System.out.println(value+" wurde geloescht");
}
public ArrayList<Double> processCalculations(){
return op.processCalculations(modifier, values);
}
public String toString(){
return "Liste: "+values.toString();
}
}
Java:
public class TestRechner {
public static void main(String[]args){
Rechner re=new Rechner();
// Modifier hinzufügen
re.setModifier(5.0);
// Liste befüllen
re.addValue(10.0);
re.addValue(15.0);
// Liste löschen
re.removeValue(15.0);
//+
// Ausgabe
System.out.println(re.toString());
}
}
Meine Frage ist jetzt, wie ich die einzelnen Elementen in der Liste mit dem modifer addieren, subtrahieren, multiplizieren bzw dividieren kann, so wie im ersten Beispiel und wie ich die berechnete Liste zurückgeben kann.
Ich hoffe es kann mir wer helfen,
vielen dank im Voraus.