Warnung:
Type safety: The method createMult(Expression, Expression) belongs to the raw type AbstractStructureFactory. References to generic type AbstractStructureFactory<T> should be parameterized.
Also das ist das komplette Programm. Da die AbstractStructureFactory abstract ist, werden nicht direkt Typen angelegt, sondern abgeleitete Typen angelegt:
Code:
package algebraicStructuresFactory;
import algebraicStructures.Expression;
import inout.In;
import inout.Out;
public class AlgebraicStructureTest {
/**
* @param args
*/
public static void main(String[] args) {
AbstractStructureFactory structureFactory;
int decide,index,left,right;
String constant;
Out.print("Decide on ring system:" +
"\n[1] for Bool" +
"\n[2] for Modulo 5" +
"\nYour selection: ");
decide = In.readInt();
switch(decide){
case 1:
structureFactory = new BoolStructureFactory();
break;
case 2:
structureFactory = new Z5StructureFactory();
break;
default:
Out.println("invalid input");
return;
}
AlgebraicStructure structure = new AlgebraicStructure(structureFactory);
do{
Out.print("\nCommands are:" +
"\n[1] - for new constant" +
"\n[2] - for evaluate" +
"\n[3] - for multiplication expression" +
"\n[4] - for plus expression" +
"\n[5] - for quit" +
"\nSelect your command:");
decide = In.readInt();
if(decide == 1){
Out.print(" Constant: ");
constant = In.readWord();
#structure.addExpression(structure.getStructureFactory().createConst(constant));
}
if(decide == 2){
Out.print(" Index: ");
index = In.readInt();
#structure.addExpression(structure.get(index).evaluate());
}
if(decide == 3){
Out.print("Index left operand: ");
left = In.readInt();
Out.print("Index right operand: ");
right = In.readInt();
#structure.addExpression(structure.getStructureFactory().createMult(structure.get(left),structure.get(right)));
}
if(decide == 4){
Out.print("Index left operand: ");
left = In.readInt();
Out.print("Index right operand: ");
right = In.readInt();
#structure.addExpression(structure.getStructureFactory().createPlus(structure.get(left),structure.get(right)));
}
if (decide != 5){
#Out.println("[" + (structure.size()-1) + "] " + structure.get(structure.size()-1));
}
}while(decide != 5);
}
}
[\code]
Hab leider keine Ahnung was ich bei den Objekten anders schreiben müsste um keine Fehlermeldungen (Zeile mit Asterix #) zu bekommen.[code]
Also das ist das komplette Programm. Da die AbstractStructureFactory abstract ist, werden nicht direkt Typen angelegt, sondern abgeleitete Typen angelegt:
Code:
package algebraicStructuresFactory;
import algebraicStructures.Expression;
import inout.In;
import inout.Out;
public class AlgebraicStructureTest {
/**
* @param args
*/
public static void main(String[] args) {
AbstractStructureFactory structureFactory;
int decide,index,left,right;
String constant;
Out.print("Decide on ring system:" +
"\n[1] for Bool" +
"\n[2] for Modulo 5" +
"\nYour selection: ");
decide = In.readInt();
switch(decide){
case 1:
structureFactory = new BoolStructureFactory();
break;
case 2:
structureFactory = new Z5StructureFactory();
break;
default:
Out.println("invalid input");
return;
}
AlgebraicStructure structure = new AlgebraicStructure(structureFactory);
do{
Out.print("\nCommands are:" +
"\n[1] - for new constant" +
"\n[2] - for evaluate" +
"\n[3] - for multiplication expression" +
"\n[4] - for plus expression" +
"\n[5] - for quit" +
"\nSelect your command:");
decide = In.readInt();
if(decide == 1){
Out.print(" Constant: ");
constant = In.readWord();
structure.addExpression(structure.getStructureFactory().createConst(constant));
}
if(decide == 2){
Out.print(" Index: ");
index = In.readInt();
structure.addExpression(structure.get(index).evaluate());
}
if(decide == 3){
Out.print("Index left operand: ");
left = In.readInt();
Out.print("Index right operand: ");
right = In.readInt();
structure.addExpression(structure.getStructureFactory().createMult(structure.get(left),structure.get(right)));
}
if(decide == 4){
Out.print("Index left operand: ");
left = In.readInt();
Out.print("Index right operand: ");
right = In.readInt();
structure.addExpression(structure.getStructureFactory().createPlus(structure.get(left),structure.get(right)));
}
if (decide != 5){
Out.println("[" + (structure.size()-1) + "] " + structure.get(structure.size()-1));
}
}while(decide != 5);
}
}
Hallo...falls dich beruhigt...mit genau demselben Problem hab ich auch zu kämpfen (mach dieselber Aufgabe)...bei mir sind aber leider noch mehr Warnungen vorhanden wegen der Typsicherheit...wie hast du das mit der Expressionliste gelöst? Die muss man doch auch einbauen und kann aber leider den Platzhaltertyp bei Expression nicht genau bestimmen zu Beginn...also kommts auch zu TypeSafetys....