# Einfüge Algorithmus?



## Hercules (14. Jan 2013)

Hallo!
Möchte einen Freund helfen.
Habe für ihn Task 2 schon gemacht:
http://www.cs.ucf.edu/~nazim/Lab 16.pdf


```
package aufgaben;
 
import java.util.Scanner;
 
/**
 *
 * @author Oliver
 */
public class Aufgaben {
 
 
    public static void main(String[] args) {
 
        Scanner scan = new Scanner(System.in);
        int n = 5;
        int k = 2;
        int[] box = new int[9999];
        int counter = 0;
        
        for(int i = 0; i <9999; i++)
            box[i] = 0;
        
        int stone = 1;
        boolean run = true;
        
        
        System.out.print("Enter n, the number of precious stones: ");
        n = scan.nextInt();
        
        System.out.print("Enter k, the number of skips: ");
        k = scan.nextInt();
        
        while(run)
        {
                        
             if(box[counter] == 0){
             box[counter] = stone;
             stone++;
             System.out.println(counter);
             }
             else
                 run = false;
        
             if(counter+k >= n && n%2 != 0)
                 counter = 1;
             else if(counter+k >= n)
                 counter = 2;
             else
             counter += k;
        }
 
        
        
        for(int i = 0; i < box.length; i++)
        {
           if(box[i] != 0)
           {
           System.out.println("Box " + i + " contains stone " + box[i]);
           }
        
        }
                
   
    
    }
}
```

Ich versuche schon die ganze Zeit Task 3 zu machen aber ich komme einfach nicht auf die Lösung.
Könnt ihr mir bitte sagen wie das funktionieren soll?
Bis ich das raus habe kann ich nicht mehr ruhig schlafen.


----------



## Bert Brenner (15. Jan 2013)

Ich sage jetzt erst mal, das du Task 2 auch noch nicht ganz korrekt gelöst hast.

Denk mal über den Fall 6 Steine und 5 Fächer springen nach.





Für den 3. Task kannst du doch ganz einfach immer über die Felder gehen und zählst wie oft du ein leeres Feld gefunden hast, wenn die geforderte Anzahl erreicht ist schubst du den "Stein" rein.





PS: Du brauchst dein Array nicht fest mit 
	
	
	
	





```
int[] box = new int[9999];
```
 erzeugen, das geht auch mit 
	
	
	
	





```
int[] box = new int[n];
```
 (natürlich erst wenn n auch den korrekten Wert hat). Initialisieren musst du ein int[] übrigends auch nicht mit 0, das kannst du dir sparen.


----------



## Hercules (15. Jan 2013)

Danke für die Hilfe!
Ich habe jetzt denke ich Task 2 richtig.
CodePaste.NET - Lab 16 Task 2 new version
(Ja ich weiss da ist noch die for schleife für die initialisierung drin, hab ich nun draußen ^^")

Jetzt hab ich Task 3 fast richtig aber weiß nicht mehr weiter. Die ersten 3 Schritte gehen aber dann fehlt am Ende ein Schritt. Habe es im Debugger laufen lassen da sah man das gut.


```
package aufgaben;
 
import java.util.Scanner;
 
/**
 *
 * @author Oliver
 */
public class Aufgaben {
 
 
    public static void main(String[] args) {
 
        Scanner scan = new Scanner(System.in);
        int n = 6;
        int k = 4;
        int[] box = new int[n];
        int counter = 0;
        int empty = 0;       
      
        int stone = 1;
        boolean run = true;
        
//        
//        System.out.print("Enter n, the number of precious stones: ");
//        n = scan.nextInt();
//        
//        System.out.print("Enter k, the number of skips: ");
//        k = scan.nextInt();
        
        while(run)
        {
             // If box is empty put a stone inside           
             if(box[counter] == 0){
             box[counter] = stone;
             stone++;  // Increase the stoneNr.
             empty = 0;
             }
             else
                 run = false;  //we are finish
                
             
             while(empty!=k-1)
             {
                
                 if(counter==n-1 && box[counter] != 0)
                     counter=0;  
                 
                 else if(counter==n-1 && box[counter] == 0){
                     counter=0; 
                     empty++;
                 }
                 
                 else if(box[counter] == 0){
                     empty++;                 
                     counter++;
                 }
                 else
                     counter++;
                 
             }
     
        }
       
        for(int i = 0; i < box.length; i++)
        {
           if(box[i] != 0)
           {
           System.out.println("Box " + i + " contains stone " + box[i]);
           }
        
        }
    }
}
```


----------



## Hercules (16. Jan 2013)

Ich habe mich mal angemeldet. [edit SlaterB: vorherige anonyme Beiträge nachträglich zugeordnet]
Die ersten drei Schritte gehen aber ich finde den Fehler einfach nicht!


```
package aufgaben;
 
import java.util.Scanner;
 
/**
 *
 * @author Oliver
 */
public class Aufgaben {
 
 
    public static void main(String[] args) {
 
        Scanner scan = new Scanner(System.in);
        int n = 6;
        int k = 4;
        int[] box = new int[n];
        int counter = 0;
        int empty = 0;    
             
        int stone = 1;
        boolean run = true;
        
//        
//        System.out.print("Enter n, the number of precious stones: ");
//        n = scan.nextInt();
//        
//        System.out.print("Enter k, the number of skips: ");
//        k = scan.nextInt();        
        
          box[counter] = stone;
          stone++;  
        
        while(run)
        {           
                 counter++;               
                 
                 // If box is empty count it.
                 if(box[counter] == 0)
                 {
                    empty++;
                    
                    // if all step were gone put the stone inside.
                    if(empty==k)
                    {
                        
                        box[counter] = stone;
                        stone++;
                        empty = 0;
                          // if we arrived at the end of the boxes we go back to the beginning
                          if(counter == n-1)
                             counter = 0;
                    }
                    //if we arrived at the last box but did not gone all steps yet we go back to the beginning
                    else if(counter == n-1)
                            counter = 0;
                    
                 }
                 // else all boxes are full and the loop stops
                 else if(box[counter] != 0 && empty == 4)
                     run = false;
                 
                 else if(box[counter] != 0 && counter == n-1)
                         counter = 0;
                
             
     
        }
       
        // give out the stones inside the box
        for(int i = 0; i < box.length; i++)
        {
           if(box[i] != 0)
           {
           System.out.println("Box " + i + " contains stone " + box[i]);
           }
        
        }
    }
}
```

Könnt ihr es euch mal bitte anschauen. 
Wo hab ich einen logischen Fehler gemacht?

EDIT: OK einen Fehler habe ich schonmal entdeckt.
Nach dem 3. Schritt beendet das Programm da muss ich nochmal gucken.
Habe oben mal den Code geändert aber jetzt kommt ein ArrayIndexOutOfBoundsException: 6.
Hmm...

*EDIT2:* Ok ich habe den COde oben nochmal geändert. Der Algorithmus müsste stimmen, leider kann sich das Programm nicht mehr beenden. Weil empty nachdem alles voll ist nicht mehr hochzählt. Also muss ich irgentwie rauskriegen wann ALLE Boxen voll sind.


----------



## Hercules (16. Jan 2013)

Ich kann meinen Beitrag leider nicht mehr ändern.
Aber ich habe es *geschafft*!!!

Endlich kann mein Geist zu Ruhe kommen.
Korrekte Lösung:


```
package aufgaben;
 
import java.util.Scanner;
 
/**
 *
 * @author Oliver
 */
public class Aufgaben {
 
 
    public static void main(String[] args) {
 
        Scanner scan = new Scanner(System.in);
        int n = 6;
        int k = 4;
        int[] box = new int[n];
        int counter = 0;
        int empty = 0;    
        int finish = 0;
        int stone = 1;
        boolean run = true;
        
//        
//        System.out.print("Enter n, the number of precious stones: ");
//        n = scan.nextInt();
//        
//        System.out.print("Enter k, the number of skips: ");
//        k = scan.nextInt();        
        
          box[counter] = stone;
          stone++;  
        
        while(run)
        {           
                 counter++;               
                 
                 // If box is empty count it.
                 if(box[counter] == 0)
                 {
                    empty++;
                    
                    // if all step were gone put the stone inside.
                    if(empty==k)
                    {
                        
                        box[counter] = stone;
                        stone++;
                        empty = 0;
                          // if we arrived at the end of the boxes we go back to the beginning
                          if(counter == n-1)
                             counter = 0;
                    }
                    //if we arrived at the last box but did not gone all steps yet we go back to the beginning
                    else if(counter == n-1)
                            counter = 0;
                    
                 }
                 // else all boxes are full and the loop stops
                 else if(box[counter] != 0 && empty == 4)
                     run = false;
                 
                 else if(box[counter] != 0 && counter == n-1)
                         counter = 0;
                
             for(int i=0;i<box.length;i++)
             {
                 if(box[i] != 0 )
                 finish++;
             }
             
             if(finish == box.length)
                 run=false;
             else
                 finish=0;
     
        }
       
        // give out the stones inside the box
        for(int i = 0; i < box.length; i++)
        {
           if(box[i] != 0)
           {
           System.out.println("Box " + i + " contains stone " + box[i]);
           }
        
        }
    }
}
```


----------



## timbeau (16. Jan 2013)

Dein Taks 2 ist fehlerhaft:

n = 5
k= 6


----------

