📄 probleemoplosser.java
字号:
/*
* Created on 9-okt-2004
*
* To change the template for this generated file go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/
package logic;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.LinkedList;
/**
* @author gebruiker
*
* To change the template for this generated type comment go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/
public abstract class ProbleemOplosser {
protected LinkedList list = new LinkedList();
public abstract SpeelBordToestand getOplossing(SpeelBordToestand start, SpeelBordToestand doel);
protected int intPositionInList = 0;
protected long lngTimeInMillis = 0;
protected long lngStartTimeInMillis = 0;
protected int intNumberOfNodesExpanded = 0;
//private SpeelBordToestand huidigeKnoop;
/**
* Als je de oplossing bereikt hebt na een zoekalgoritme, moet je van de oplossing de parent knopen
* doorlopen, en zo krijg je het oplossingspad. Deze methode zoekt vanuit de oplossing telkens de
* parent knopen op en voegt ze toe in die volgorde aan een LinkedList
*
* Is protected omdat deze methode enkel mag aangewend worden door subklassen.
*
* @param opl Is de oplossing waarvan alle parents in een list moeten geplaatst worden
* @return LinkedList die alle knopen bevat, van startsituatie tot oplossing.
*/
protected void createSolutionList(SpeelBordToestand opl)
{
//LinkedList list = new LinkedList();
solutionFound();
list.clear();//zorg ervoor dat alle gegevens uit de bestaande list zijn.
SpeelBordToestand huidigeKnoop = opl;
list.addFirst(opl);
while(huidigeKnoop != null)
{
list.addFirst(huidigeKnoop);
huidigeKnoop = huidigeKnoop.getParent();
}
}
/**
*
* Deze geeft de startpositie weer
*
*/
public SpeelBordToestand getFirst()
{
intPositionInList = 0;
return (SpeelBordToestand)list.get(intPositionInList);
}
/**
*
*
* @return null als er geen volgende node meer is.
*/
public SpeelBordToestand getVolgende()
{
SpeelBordToestand volgende = null;
if(intPositionInList + 1 < list.size())
intPositionInList++;
return (SpeelBordToestand)list.get(intPositionInList);
}
/**
*
*
* @return null als er geen vorige node is.
*/
public SpeelBordToestand getVorige()
{
SpeelBordToestand vorige = null;
if(intPositionInList > 0)
intPositionInList--;
return (SpeelBordToestand)list.get(intPositionInList);
}
public int getNumberOfNodesExpanded()
{
return intNumberOfNodesExpanded;
}
public int getNumberOfMovesToSolution()
{
return list.size() - 2;//begin en eindsituatie niet meetellen.
}
/*
* afgelegde tijd in seconden.
*/
public long getTimeElapsed()
{
return lngTimeInMillis;
}
public String getSummaryInHtml()
{
StringBuffer html = new StringBuffer("<html><body><table><tr><td>");
html.append("Number of moves: </td><td>" + this.getNumberOfMovesToSolution());
html.append("</td></tr><tr><td>Number of nodes expanded: </td><td>" + this.getNumberOfNodesExpanded());
html.append("</td></tr><tr><td>Time elapsed (in millisec.): </td><td>" + this.getTimeElapsed());
html.append("</table></body></html>");
return html.toString();
}
protected void solutionFinderStarted()
{
Calendar cal = new GregorianCalendar();
lngStartTimeInMillis = cal.getTimeInMillis();
}
private void solutionFound()
{
Calendar cal = new GregorianCalendar();
lngTimeInMillis = cal.getTimeInMillis() - lngStartTimeInMillis;
}
protected void clearLists()
{
list.clear();
intPositionInList = 0;
intNumberOfNodesExpanded = 0;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -