wesleyc
Artikelen: 0
Berichten: 99
Lid geworden op: wo 16 nov 2011, 16:17

[java] vraag over subklassen en overerving/riding

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 :P
Gebruikersavatar
ZVdP
Artikelen: 0
Berichten: 2.097
Lid geworden op: za 16 jul 2005, 23:45

Re: [java] vraag over subklassen en overerving/riding

Het is een kleinigheidje:

Code: Selecteer alles

	public static Ex read(Scanner sc)

{

String next=sc.next();

if(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(next);

return s3;

}

}
Zie je wat er eerder verkeerd ging?

En mocht je ooit zoiets nodig hebben in een while-loop, dan kan je ook de volgende syntax gebruiken:

Code: Selecteer alles

String next;

while ((next=sc.next()).equals('(') )

{

   // do something with next   

...

}
Verder nog een aantal kleinigheden ivm met het aanmaken van onnodige tussenvariabelen:

Code: Selecteer alles

BinEx bi = new BinEx(s1,op1,s2);

return bi;
wordt simpel

Code: Selecteer alles

return new BinEx(s1,op1,s2);

Code: Selecteer alles

public String toString(){

String res = "<SimEx(";

res = res + tekst + ")>";

return res;

}
wordt

Code: Selecteer alles

public String toString(){

return "<SimEx(" + tekst + ")>";

}
of als je er wat meer structuur in wil aanbrengen

Code: Selecteer alles

return "<SimEx(" + 

tekst + 

")>";
"Why must you speak when you have nothing to say?" -Hornblower

Conserve energy: Commute with a Hamiltonian
wesleyc
Artikelen: 0
Berichten: 99
Lid geworden op: wo 16 nov 2011, 16:17

Re: [java] vraag over subklassen en overerving/riding

:P

Ik wist dat het een kleinigheid moest zijn, maar dat dit het was :P

Hartstikke bedankt, ik heb mijn programma net gerund en het werkte ;)
Gebruikersavatar
ZVdP
Artikelen: 0
Berichten: 2.097
Lid geworden op: za 16 jul 2005, 23:45

Re: [java] vraag over subklassen en overerving/riding

Het zijn altijd de kleinigheden waarnaar je het langst moet zoeken; des te groter de fout, des te harder ze typisch opvalt.

Ik heb ooit heel lang moeten zoeken naar waarom volgende code maar 1 keer "test" print ipv 10 keer:

Code: Selecteer alles

for (int i=0;i<10;i++);

{

 System.out.println("test");

}
En als je het dan eenmaal vindt, dan vraag je je af waarom het zo lang geduurd heeft vooraleer je zo'n stomme, en soms zelfs niet eens subtiele, foutjes vindt.
"Why must you speak when you have nothing to say?" -Hornblower

Conserve energy: Commute with a Hamiltonian
wesleyc
Artikelen: 0
Berichten: 99
Lid geworden op: wo 16 nov 2011, 16:17

Re: [java] vraag over subklassen en overerving/riding

ZVdP schreef:Het zijn altijd de kleinigheden waarnaar je het langst moet zoeken; des te groter de fout, des te harder ze typisch opvalt.

Ik heb ooit heel lang moeten zoeken naar waarom volgende code maar 1 keer "test" print ipv 10 keer:

Code: Selecteer alles

for (int i=0;i<10;i++);

{

 System.out.println("test");

}
En als je het dan eenmaal vindt, dan vraag je je af waarom het zo lang geduurd heeft vooraleer je zo'n stomme, en soms zelfs niet eens subtiele, foutjes vindt.
ik moest ook even zoeken ;)

Hier mag een slotje op
Gebruikersavatar
In physics I trust
Artikelen: 0
Berichten: 7.390
Lid geworden op: za 31 jan 2009, 08:09

Re: [java] vraag over subklassen en overerving/riding

Haha, dat was subtiel ;) Voor zij die het niet zagen:

Verborgen inhoud
for (int i=0;i<10;i++);

{

System.out.println("test");

}
"C++ : Where friends have access to your private members." Gavin Russell Baker.

Terug naar “Informatica en programmeren”