2016-05-19 4 views
0

Ich habe die folgende Sequenz von Zahlen:Java berechnet Sequenz mit Queue

S1 = N, S2 = S1 + 1, S3 = 2*S1 + 1, S4 = S1 + 2, S5 = S2 + 1, S6 = 2*S2 + 1, S7 = S2 + 2 ... 

Mit der ArrayDeque<E> Klasse, ich habe ein Programm zu schreiben, seine ersten 50 Mitglieder für bestimmte N zu drucken. Beispiele:

input 2 
output 2 3 5 4 4 7 5 6 11 7 5 9 6 ... 

Dies ist mein Code. Das Problem ist, dass ich nicht weiter aktualisieren kann S

import java.util.ArrayDeque; 
import java.util.Queue; 
import java.util.Scanner; 

public class p04 { 
    public static void main(String[] args) { 
     Scanner scanner = new Scanner(System.in); 
     int numN = scanner.nextInt(); 
     scanner.close(); 
     int counter = 1; 
     int nexS = numN; 
     Queue<Integer> fifty = new ArrayDeque<>(); 
     for (int i = 0; i < 50; i++) { 
      if (i == 0){ 
       fifty.add(numN); 
      }else { 
       if (counter == 1){ 
        counter++; 
        numN = nexS + 1; 
        fifty.add(numN); 
       }else if (counter == 2){ 
        counter++; 
        numN = (nexS * 2) + 1; 
        fifty.add(numN); 
       }else { 
        counter = 1; 
        numN = nexS +2; 
        fifty.add(numN); 
        nexS = nexS + 1; 
       } 
      } 
     } 

     for (Integer integer : fifty) { 
      System.out.print(integer + " "); 
     } 
    } 
} 
+2

Haben Sie etwas versucht? kannst du uns zeigen, was du getan hast? –

+0

Ich habe es geändert. Es war nicht absichtlich. Entschuldigung – Phil

Antwort

1

Die Art, wie Sie dieses Problem lösen, ist es einfacher, es mit ArrayList zu lösen. Ich denke, dass meine Lösung mehr Warteschlange orientiert ist und das war Ihre Aufgabe. Das ist also mein nehmen:

import java.util.ArrayDeque; 
import java.util.Scanner; 

public class SequenceQuestion { 

    public static void constructSequence(int start, int seqLength) { 
     ArrayDeque<Integer> queue = new ArrayDeque<>(); 
     queue.add(start); 
     System.out.print(start); 
     for (int i = 0; i < seqLength - 1; i++) { 
      int print = 0; 
      if (i % 3 == 0 && i != 0) queue.remove(); 

      if (i % 3 == 0) { 
       print = queue.peek() + 1; 
       queue.add(print); 
      } else if (i % 3 == 1) { 
       print = queue.peek() * 2 + 1; 
       queue.add(print); 
      } else if (i % 3 == 2) { 
       print = queue.peek() + 2; 
       queue.add(print); 
      } 
      System.out.print(", " + print); 
     } 
    } 

    public static void main(String[] args) { 
     Scanner s = new Scanner(System.in); 
     constructSequence(s.nextInt(), 50); 
    } 
} 

Sie haben keine Zähler benötigen, weil Sie bereits eine haben (i) und wenn man immer für mod überprüfen 3 am Anfang und wenn auf gleich 0 ist, entfernen Sie das erste Element aus der Warteschlange . Ich sehe, dass dies der Ort ist, mit dem du Probleme hattest.

+0

Danke. Genial :) – Phil

+0

Gern geschehen. Wenn dies Ihre Frage beantwortet hat, wählen Sie sie bitte als Antwort oben links in meinem Post aus. – MaxG