2017-05-20 2 views
-1

Ich versuche, meine Anwendung auf ein Array von Zufallszahlen zu erhalten, und verwenden Sie alle möglichen Kombinationen von Rnd (1..8). Die Kombinationen sind ein Array von Indizes (Länge zwischen 2 und 99). Ich habe einen Testcode nachgeahmt, um zu zeigen, was ich bisher gesehen habe, und habe die Ergebnisse, nach denen ich suche, in die Liste aufgenommen.sequentiellen Countdown von Array-Indizes mit Min/Max-Nummern

dies erfolgreich zu tun, wir Funktion aussehen wollen ...

private static int[] updateArray(int[] array){ 
    for (int index = array.length - 1 ; index >= 0; index--){ 
     if (array[index] > 1){ 
      array[index]--; 
      return array; 
     } else if (array[index] == 1 && index != 0) { 
      if (array[index - 1] != 1) { 
       array[index - 1]--; 
       array[index] = maxNum; 
       return array; 
      } 
     } 
     index--; 
    } 

    return array; 
} 

Hinweis: ich oben nicht mit dem richtigen Algorithmus werden kann.

Hier ist der vollständige Code führt zu kompilieren ...

public class Test { 
    private static final int maxNum = 8; 

    private static int[] updateArray(int[] array){ 
     for (int index = array.length - 1 ; index >= 0; index--){ 
      if (array[index] > 1){ 
       array[index]--; 
       return array; 
      } else if (array[index] == 1 && index != 0) { 
       if (array[index - 1] != 1) { 
        array[index - 1]--; 
        array[index] = maxNum; 
        return array; 
       } 
      } 
      index--; 
     } 

     return array; 
    } 

    private static boolean isArrayIndexesAllOnes(int[] array){ 
     for (int element: array){ 
      if (element != 1){ 
       return false; 
      } 
     } 
     return true; 
    } 

    private static void printArrayCountdown(int[] array){ 
     boolean downToOne = false; 

     while (!downToOne){ 
      array = updateArray(array); 
      printArray(array); 
      if (isArrayIndexesAllOnes(array)){ 
       downToOne = true; 
      } 
     } 
    } 

    private static void printArray(int[] array){ 
     for (int index = 0; index < array.length; index++){ 

      if (index == 0) { 
       System.out.print("{" + array[index] + ","); 
      } else if (index > 0 && index < array.length - 1){ 
       System.out.print(array[index] + ","); 
      } else { 
       System.out.println(array[index] + "}"); 
      } 
     } 
    } 

    public static void main(String[] args) { 
     int[] firstArray = {maxNum,maxNum}; 
     int[] secondArray = {maxNum,maxNum,maxNum}; 

     printArrayCountdown(firstArray); 
     System.out.println(); 
     System.out.println(); 
     printArrayCountdown(secondArray); 
    } 
} 

Erwartete Ausgabe des firstArray ...

{8,7} 
{8,6} 
{8,5} 
{8,4} 
{8,3} 
{8,2} 
{8,1} 
{7,8} 
{7,7} 
{7,6} 
{7,5} 
{7,4} 
{7,3} 
{7,2} 
{7,1} 
{6,8} 
{6,7} 
{6,6} 
{6,5} 
{6,4} 
{6,3} 
{6,2} 
{6,1} 
{5,8} 
{5,7} 
{5,6} 
{5,5} 
{5,4} 
{5,3} 
{5,2} 
{5,1} 
{4,8} 
{4,7} 
{4,6} 
{4,5} 
{4,4} 
{4,3} 
{4,2} 
{4,1} 
{3,8} 
{3,7} 
{3,6} 
{3,5} 
{3,4} 
{3,3} 
{3,2} 
{3,1} 
{2,8} 
{2,7} 
{2,6} 
{2,5} 
{2,4} 
{2,3} 
{2,2} 
{2,1} 
{1,8} 
{1,7} 
{1,6} 
{1,5} 
{1,4} 
{1,3} 
{1,2} 
{1,1} 

Erfolg!

aber mit einer Reihe von mehr als 2-Indizes (z .: secondArray), erhalte ich diese Ausgabe:

{8,8,7} 
{8,8,6} 
{8,8,5} 
{8,8,4} 
{8,8,3} 
{8,8,2} 
{8,8,1} 
{8,7,8} 
{8,7,7} 
{8,7,6} 
{8,7,5} 
{8,7,4} 
{8,7,3} 
{8,7,2} 
{8,7,1} 
{8,6,8} 
{8,6,7} 
{8,6,6} 
{8,6,5} 
{8,6,4} 
{8,6,3} 
{8,6,2} 
{8,6,1} 
{8,5,8} 
{8,5,7} 
{8,5,6} 
{8,5,5} 
{8,5,4} 
{8,5,3} 
{8,5,2} 
{8,5,1} 
{8,4,8} 
{8,4,7} 
{8,4,6} 
{8,4,5} 
{8,4,4} 
{8,4,3} 
{8,4,2} 
{8,4,1} 
{8,3,8} 
{8,3,7} 
{8,3,6} 
{8,3,5} 
{8,3,4} 
{8,3,3} 
{8,3,2} 
{8,3,1} 
{8,2,8} 
{8,2,7} 
{8,2,6} 
{8,2,5} 
{8,2,4} 
{8,2,3} 
{8,2,2} 
{8,2,1} 
{8,1,8} 
{8,1,7} 
{8,1,6} 
{8,1,5} 
{8,1,4} 
{8,1,3} 
{8,1,2} 
{8,1,1} 
{7,1,1} 
{6,1,1} 
{5,1,1} 
{4,1,1} 
{3,1,1} 
{2,1,1} 
{1,1,1} 

Logic Fehler!

Stattdessen ist hier die erwartete Ausgabe ...

{8,8,7} 
{8,8,6} 
{8,8,5} 
{8,8,4} 
{8,8,3} 
{8,8,2} 
{8,8,1} 
{8,7,8} 
{8,7,7} 
{8,7,6} 
{8,7,5} 
{8,7,4} 
{8,7,3} 
{8,7,2} 
{8,7,1} 
{8,6,8} 
{8,6,7} 
{8,6,6} 
{8,6,5} 
{8,6,4} 
{8,6,3} 
{8,6,2} 
{8,6,1} 
{8,5,8} 
{8,5,7} 
{8,5,6} 
{8,5,5} 
{8,5,4} 
{8,5,3} 
{8,5,2} 
{8,5,1} 
{8,4,8} 
{8,4,7} 
{8,4,6} 
{8,4,5} 
{8,4,4} 
{8,4,3} 
{8,4,2} 
{8,4,1} 
{8,3,8} 
{8,3,7} 
{8,3,6} 
{8,3,5} 
{8,3,4} 
{8,3,3} 
{8,3,2} 
{8,3,1} 
{8,2,8} 
{8,2,7} 
{8,2,6} 
{8,2,5} 
{8,2,4} 
{8,2,3} 
{8,2,2} 
{8,2,1} 
{8,1,8} 
{8,1,7} 
{8,1,6} 
{8,1,5} 
{8,1,4} 
{8,1,3} 
{8,1,2} 
{8,1,1} 
{7,8,8} 
{7,8,7} 
{7,8,6} 
{7,8,5} 
{7,8,4} 
{7,8,3} 
{7,8,2} 
{7,8,1} 
{7,7,8} 
{7,7,7} 
{7,7,6} 
{7,7,5} 
{7,7,4} 
{7,7,3} 
{7,7,2} 
{7,7,1} 
{7,6,8} 
{7,6,7} 
{7,6,6} 
{7,6,5} 
{7,6,4} 
{7,6,3} 
{7,6,2} 
{7,6,1} 
{7,5,8} 
{7,5,7} 
{7,5,6} 
{7,5,5} 
{7,5,4} 
{7,5,3} 
{7,5,2} 
{7,5,1} 
{7,4,8} 
{7,4,7} 
{7,4,6} 
{7,4,5} 
{7,4,4} 
{7,4,3} 
{7,4,2} 
{7,4,1} 
{7,3,8} 
{7,3,7} 
{7,3,6} 
{7,3,5} 
{7,3,4} 
{7,3,3} 
{7,3,2} 
{7,3,1} 
{7,2,8} 
{7,2,7} 
{7,2,6} 
{7,2,5} 
{7,2,4} 
{7,2,3} 
{7,2,2} 
{7,2,1} 
{7,1,8} 
{7,1,7} 
{7,1,6} 
{7,1,5} 
{7,1,4} 
{7,1,3} 
{7,1,2} 
{7,1,1} 
{6,8,8} 
{6,8,7} 
{6,8,6} 
{6,8,5} 
{ect...} 
{1,1,1} 

Irgendwelche Ideen, wie diese Art von Verhalten zu bekommen?

Hinweis: Ich möchte nicht tatsächlich ausdrucken {ect...}, um nicht 512 Zeilen zu dieser Frage hinzufügen, habe ich nur etwa 400 Zeilen ausgeschnitten.

Thanks :)

+0

Entfernen Sie den 'Index -' in Ihrem 'updateArray' und es sollte das Problem beheben. Nein? – anishthecoder

+0

Schließen! aber nein, es springt zwischen "{8,1,1} und {7,8,1}" ... und '{7,1,1} und {6,8,1}' ... so weiter –

Antwort

1

Ich möchte anishthecoder Antwort für wirklich helfen mir, es danken zu verengen. Im Grunde musste ich nur die index-- (wie er sagte) entfernen und eine zusätzliche for-Schleife hinzufügen. Siehe Code unten ...

private static int[] updateArray(int[] array){ 
    for (int index = array.length - 1 ; index >= 0; index--){ 
     if (array[index] > 1){ 
      array[index]--; 
      return array; 
     } else if (array[index] == 1 && index != 0) { 
      if (array[index - 1] != 1) { 
       array[index - 1]--; 
       for (int i = index; i < array.length; i++){ 
        array[i] = maxNum; 
       } 
       return array; 
      } 
     } 
    } 

    return array; 
} 

Ich bin sicher, dass es ein sauberer Weg, dies zu tun ist, und ich würde gerne die Antwort Punkte zu jedermann geben, die mit einer saubereren Lösung kommen können. Denn jetzt das funktioniert ...

Thanks again anishthecoder :)