2013-10-04 3 views
-1

Я пытаюсь написать следующую последовательность программ.Java-программа с участием

Первые три числа в последовательности: 1, 1, 2. Каждое другое число в последовательности представляет собой сумму трех предыдущих чисел. Программа должна предлагать пользователю ввести лимит; программа остановится, когда текущее число в последовательности больше или равно этому пределу.

Например, если я пишу предел составляет 123, я должен получить: 1 1 2 4 7 13 24 44 81

Я попытался следующие:

import jpb.*; 

public class XiaolinSequence { 

    public static void main(String[] args) { 
     SimpleIO.prompt("Enter a limit on the largest number to be displayed:"); 
     String userInput = SimpleIO.readLine(); 
     int counter = Integer.parseInt(userInput); 

     int older = 1; 
     int old = 1; 
     int current = 2; 
     while (current < counter) { 
      int nextNumber = older + old + current; 
      older = old; 
      old = current; 
      current = nextNumber; 
      System.out.println(nextNumber); 
     } 
    } 

} 

Но у меня возникли проблемы с получением последовательности, чтобы распечатать.

+0

current

+3

В чем проблема? – ppeterka

+0

Когда я положил, скажите, что счетчик говорит 123, я не получаю правильный вывод. Мне нужно –

ответ

2

Вам необходимо изменить способ печати.

Пропущенные 1 1 2 никогда не печатаются, потому что они никогда не хранятся в nextnumber, единственной переменной, которую вы когда-либо печатали.

Вы получите дополнительный 149, потому что вы печатаете nextnumber, не проверяя его значение больше предела.

Для меня вывод следующего кода: 1 1 2 4 7 13 24 44 81 все на новых строках.

int counter=123; // replaced IO code so I did not have to download the jar. 
int older=1; 
int old =1; 
int current=2; 

System.out.println(older); // prints the first 1 
System.out.println(old); // prints the second 1 
System.out.println(current); // prints the 2 

while(current<counter){ 
    int nextnumber=older+old+current; 
    older=old; 
    old=current; 
    current=nextnumber; 
    if(nextnumber <= counter)  
    { 
     System.out.println(nextnumber); 
    } 
} 
+2

Это было мое первоначальное решение. Но есть более простой способ сделать это. Просто распечатайте 'old' внутри цикла. – GGrec

+0

Спасибо colin да, ваш код работает и отлично –

+0

@GCrec, я согласен, этот код можно было бы улучшить. Я просто хотел проиллюстрировать шаги, чтобы перейти от того, что OP было для рабочего решения. –

2

Хорошо, потому что люди набросились на вас за SimpleIO, используйте все, что хотите прочитать. Вместо этого я хочу указать на логический недостаток вашего кода.

Для того чтобы программа правильно функционировать, вам необходимо распечатать older вместо current, например, так:

while (older < counter) 
{ 
    System.out.println(older); 

    final int nextnumber = older + old + current; 
    older = old; 
    old = current; 
    current = nextnumber; 
} 

Он работает просто отлично.


Там нет такого понятия, как SimpleIO в java.lang.

Вы можете заменить String userInput = SimpleIO.readLine() с

System.out.print("Enter limit: "); 
Scanner in = new Scanner(System.in); 
String userInput = in.next(); 

тогда код будет работать.

О, и, кстати, не забудьте распечатать 1 1 2, прежде чем вы начнете цикл.

+1

Я предположил, что 'SimpleIO' был в' jpb. * '... – iamnotmaynard

+2

https://github.com/cesardv /Eulers/blob/master/2/jpb/SimpleIO.java –

+0

Fiiiiiine. Отредактированный ответ. – GGrec

Смежные вопросы