Test

Aus ProgrammingWiki

Wiki-Quelltext dieser Seite.

<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 hidden>
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>