[java] vraag over subklassen en overerving/riding
Geplaatst: wo 16 nov 2011, 16:42
Ik ben voor mijn opleiding Technische Wiskunde in Delft bezig met Java, we zijn begin dit jaar begonnen en nu aangekomen bij overerving etc.
De bedoeling is dat ik Strings kan invoeren, die of:
- slechts bestaan uit 1 token ( bijv. 'aaaa')
- een combinatie van tokes zijn met een bepaalde operator (C of R) ( bijv. '( aaaa C bbb )' , maar ook '( ( aaa R bb ) C zzz )' )
Om hier mee om te kunnen gaan is het de bedoeling om een Superklasse ( Ex ) en twee subklassen (SimEx en BinEx) te creeeren. SimEx regelt de 1 token Strings en BinEx de combinaties.
BinEx is een combinatie van een SimEx + operator + SimEx
Er is gebruik gemaakt van een scanner om een Expressie in te lezen.
Mijn programma waarin Ex.java wordt aangeroepen is dit:
import java.util.*;
public class Opdracht7_1{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
Ex exp = Ex.read(sc);
System.out.println(exp.eval().toString());
}
}
Mijn Ex.java ziet er nu zo uit:
import java.util.*;
public abstract class Ex{
//inhoud van klasse Ex
public abstract String eval();
public static Ex read(Scanner sc){
if(sc.next().equals("(")){
Ex s1 = read(sc);
char op1 = sc.next().charAt(0);
Ex s2 = read(sc);
sc.next();
BinEx bi = new BinEx(s1,op1,s2);
return bi;
}
else{
SimEx s3 = new SimEx(sc.next());
return s3;
}
}
}
//SIMEX KLASSE ---------------------------------
class SimEx extends Ex{
private String tekst;
public SimEx(String tk){
tekst = tk;
}
public String eval(){
return tekst;
}
public String toString(){
String res = "<SimEx(";
res = res + tekst + ")>";
return res;
}
}
//BINEX KLASSE -----------------------------------
class BinEx extends Ex{
private Ex operand1;
private Ex operand2;
private char operator;
public BinEx(Ex s1, char op, Ex s2){
operand1 = s1;
operand2 = s2;
operator = op;
}
public String eval(){
if( operator == 'C'){
return operand1.eval() + operand2.eval();
}
else{
return operand2.eval() + operand1.eval();
}
}
public String toString(){
String res = "<BinEx(";
res = res + operand1 + "," + operator + "," + operand2 + ")>";
return res;
}
}
Alles Compiled maar als ik uitvoer kan ik typen wat ik wil, er komt niks uit
Ergens zit er een foutje in maar ik ben de draad even kwijt, heb al me boek erbij gepakt en op internet gezocht maar het wil niet echt. Wie o wie kan mij helpen?
Belangrijk: We moeten veel dingen nog op de primaire manier doen, we mogen dus geen fancy opties gebruiken om lappen script te skippen
De bedoeling is dat ik Strings kan invoeren, die of:
- slechts bestaan uit 1 token ( bijv. 'aaaa')
- een combinatie van tokes zijn met een bepaalde operator (C of R) ( bijv. '( aaaa C bbb )' , maar ook '( ( aaa R bb ) C zzz )' )
Om hier mee om te kunnen gaan is het de bedoeling om een Superklasse ( Ex ) en twee subklassen (SimEx en BinEx) te creeeren. SimEx regelt de 1 token Strings en BinEx de combinaties.
BinEx is een combinatie van een SimEx + operator + SimEx
Er is gebruik gemaakt van een scanner om een Expressie in te lezen.
Mijn programma waarin Ex.java wordt aangeroepen is dit:
import java.util.*;
public class Opdracht7_1{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
Ex exp = Ex.read(sc);
System.out.println(exp.eval().toString());
}
}
Mijn Ex.java ziet er nu zo uit:
import java.util.*;
public abstract class Ex{
//inhoud van klasse Ex
public abstract String eval();
public static Ex read(Scanner sc){
if(sc.next().equals("(")){
Ex s1 = read(sc);
char op1 = sc.next().charAt(0);
Ex s2 = read(sc);
sc.next();
BinEx bi = new BinEx(s1,op1,s2);
return bi;
}
else{
SimEx s3 = new SimEx(sc.next());
return s3;
}
}
}
//SIMEX KLASSE ---------------------------------
class SimEx extends Ex{
private String tekst;
public SimEx(String tk){
tekst = tk;
}
public String eval(){
return tekst;
}
public String toString(){
String res = "<SimEx(";
res = res + tekst + ")>";
return res;
}
}
//BINEX KLASSE -----------------------------------
class BinEx extends Ex{
private Ex operand1;
private Ex operand2;
private char operator;
public BinEx(Ex s1, char op, Ex s2){
operand1 = s1;
operand2 = s2;
operator = op;
}
public String eval(){
if( operator == 'C'){
return operand1.eval() + operand2.eval();
}
else{
return operand2.eval() + operand1.eval();
}
}
public String toString(){
String res = "<BinEx(";
res = res + operand1 + "," + operator + "," + operand2 + ")>";
return res;
}
}
Alles Compiled maar als ik uitvoer kan ik typen wat ik wil, er komt niks uit
Ergens zit er een foutje in maar ik ben de draad even kwijt, heb al me boek erbij gepakt en op internet gezocht maar het wil niet echt. Wie o wie kan mij helpen?
Belangrijk: We moeten veel dingen nog op de primaire manier doen, we mogen dus geen fancy opties gebruiken om lappen script te skippen