2016-05-19 1 views
0

У меня есть следующая последовательность чисел:Java Вычислить последовательность с очередью

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

ArrayDeque<E> Используя класс, я должен написать программу, чтобы напечатать свои первые 50 элементов для данного N. Примеры:

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

Это мой код. Проблема в том, что я не могу обновить следующий 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

Вы что-то пробовали? можете ли вы показать нам, что вы сделали? –

+0

Я изменил его. Это было не специально. Извините – Phil

ответ

1

Способ решения этой проблемы проще решить с помощью ArrayList. Я думаю, что мое решение больше ориентировано на очередь, и это была ваша задача. Так что это мое взятие:

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); 
    } 
} 

Вам не нужны счетчики, потому что уже есть (i), и если вы всегда проверить моды 3 в начале, и если равен 0, то удалить первый элемент из очереди , Я вижу, что это то место, с которым вы столкнулись.

+0

Спасибо. Awesome :) – Phil

+0

Добро пожаловать. Если это ответили на ваш вопрос, выберите его в качестве ответа в левом верхнем углу моего сообщения. – MaxG