Test
Aus ProgrammingWiki
Wiki-Quelltext dieser Seite.
<language>Java</language>
<code>
private java.util.HashMap gegenstaende = new java.util.HashMap();
gegenstaende.put(1, new java.awt.Point(13,19));
gegenstaende.put(2, new java.awt.Point(11,20));
gegenstaende.put(3, new java.awt.Point(17,23));
gegenstaende.put(4, new java.awt.Point(15,21));
gegenstaende.put(5, new java.awt.Point(16,27));
gegenstaende.put(6, new java.awt.Point(14,25));
gegenstaende.put(7, new java.awt.Point(18,25));
gegenstaende.put(8, new java.awt.Point(10,18));
gegenstaende.put(9, new java.awt.Point(19,24));
gegenstaende.put(10, new java.awt.Point(12,17));
public int gesamtwertIterativ(int kapazitaet)
{
int[] zeileAlt = new int[kapazitaet+1];
int[] zeileNeu = new int[kapazitaet+1];
for(int z = 1; z <= gegenstaende.size();z++)
{
System.arraycopy(zeileNeu, 0, zeileAlt, 0, zeileAlt.length);
int gewicht = (int)gegenstaende.get(z).getX();
for(int s = 0; s <= kapazitaet; s++)
{
if(s < gewicht)
{
zeileNeu[s] = zeileAlt[s];
}
else
{
int temp = zeileAlt[s-gewicht] + (int)gegenstaende.get(z).getY();
if(temp>zeileAlt[s])
{
zeileNeu[s] = temp;
}
else
{
zeileNeu[s] = zeileAlt[s];
}
}
}
}
return zeileNeu[kapazitaet];
}
</code>
<eval>System.out.println("Ergebnis iterativ: " + gesamtwertIterativ(120));</eval>
<code>
private void initCanvas(int kapazitaet)
{
canvas.clear();
canvas.line(20,0,20,200);
canvas.line(0,20,1100,20);
for(int i = 0 ; i <= kapazitaet ; i++)
{
canvas.text(30+i*25,15,""+i);
}
for(int i = 0 ; i <= kapazitaet ; i++)
{
canvas.text(30+i*25,35,"0");
}
for(int i = 0 ; i <= gegenstaende.size() ; i++)
{
canvas.text(2,20+(i+1)*15,""+i);
}
}
private void DrawText(int x, int y, int red, String s){
canvas.clear(x,y,x+25,y+25);
canvas.setColor(red,0,0);
canvas.text(x,y,s);
}
private void ansichtCanvas(int kapazitaet)
{
initCanvas(kapazitaet);
int[] zeileAlt = new int[kapazitaet+1];
int[] zeileNeu = new int[kapazitaet+1];
for(int z = 1; z <= gegenstaende.size();z++)
{
System.arraycopy(zeileNeu, 0, zeileAlt, 0, zeileNeu.length);
//zeileAlt = zeileNeu.clone();
int gewicht = (int)gegenstaende.get(z).getX();
for(int s = 0; s <= kapazitaet; s++)
{
if(s < gewicht)
{
zeileNeu[s] = zeileAlt[s];
DrawText(30+s*25,5+(z+1)*15,255,""+zeileAlt[s]);
DrawText(30+s*25,20+(z+1)*15,0,""+zeileNeu[s]);
Thread.sleep(100);
DrawText(30+s*25,5+(z+1)*15,0,""+zeileAlt[s]);
}
else
{
int temp = zeileAlt[s-gewicht] + (int)gegenstaende.get(z).getY();
if(temp>zeileAlt[s])
{
zeileNeu[s] = temp;
canvas.setColor(255,0,0);
canvas.text(30+s*25,20+(z+1)*15,""+zeileNeu[s]);
canvas.text(30+(s-gewicht)*25,5+(z+1)*15,""+zeileAlt[s-gewicht]);
Thread.sleep(800);
canvas.setColor(0,0,0);
canvas.text(30+s*25,20+(z+1)*15,""+zeileNeu[s]);
canvas.text(30+(s-gewicht)*25,5+(z+1)*15,""+zeileAlt[s-gewicht]);
}
else
{
zeileNeu[s] = zeileAlt[s];
canvas.setColor(255,0,0);
canvas.text(30+s*25,5+(z+1)*15,""+zeileAlt[s]);
canvas.setColor(0,0,0);
canvas.text(30+s*25,20+(z+1)*15,""+zeileNeu[s]);
Thread.sleep(350);
canvas.text(30+s*25,5+(z+1)*15,""+zeileAlt[s]);
}
}
}
/*
for(int s = 0; s <= kapazitaet; s++)
{
if(s < gewicht)
{
zeileNeu[s] = zeileAlt[s];
}
else
{
int temp = zeileAlt[s-gewicht] + (int)gegenstaende.get(z).getY();
if(temp>zeileAlt[s])
{
zeileNeu[s] = temp;
}
else
{
zeileNeu[s] = zeileAlt[s];
}
}
canvas.setColor(255,0,0);
canvas.text(30+s*25,20+(z+1)*15,""+zeileNeu[s]);
canvas.text(30+s*25,5+(z+1)*15,""+zeileAlt[s]);
Thread.sleep(200);
canvas.setColor(0,0,0);
canvas.text(30+s*25,20+(z+1)*15,""+zeileNeu[s]);
canvas.text(30+s*25,5+(z+1)*15,""+zeileAlt[s]);
}*/
}
}
</code>
<canvas width=800 height=200></canvas>
Aufgrund von verschiedenen Desktopauflösungen, haben wir uns auf 1024 x egal entschieden und somit wird maximal eine Kapazität von 30 gezeichnet.
<eval>
ansichtCanvas(30);
</eval>