проект Euler #2 в java

Может ли кто-нибудь взглянуть на мой код Java и рассказать мне, как исправить мой код. Вопрос ниже. Буду очень признателен за любую помощь :)

public class problem
{
    public static void main (String args []){
        int a = 0;
        int b = 1;
        problem();
    }

    public static int problem(){

        int c = a + b;
        if (c>10){
            System.out.println(c);
            return c;
        }
        int a = b;
        int b = c;
        problem();
    }
}

Каждый новый член последовательности Фибоначчи создается путем добавления двух предыдущих членов. Начиная с 1 и 2, первые 10 членов будут:

1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...

Рассмотрев члены последовательности Фибоначчи, значения которых не превышают четырех миллионов, найдите сумму членов с четными значениями.


person user3329678    schedule 19.02.2014    source источник
comment
вы не объявляли свои переменные вне основного метода   -  person Robert Snyder    schedule 19.02.2014
comment
Учитывая, что вы не очень опытны в Java, я хотел бы отметить, что Java — не лучший инструмент для решения задач Project Euler, а решение задач Project Euler — не лучший способ изучения Java. Если ваша цель — повеселиться, решая проблемы программирования, используйте Python или Ruby. Если ваша цель — изучить Java, лучшим подходом может быть более практичный проект.   -  person Eric Wilson    schedule 19.02.2014
comment
Ваш класс также имеет то же имя, что и ваш метод (в регистре и имени), и void main() обычно не находится в классе?   -  person Brandon    schedule 19.02.2014
comment
@EricWilson, можете ли вы объяснить, почему Java плохо справляется с решением PE? проблемы? Я использую как C#, так и java. Однако я использую NUnit/JUnit, чтобы шаг за шагом решать проблемы. Конечно, решение проблемы, вероятно, займет больше времени, но я не считаю это плохим инструментом. Не могли бы вы объяснить?   -  person Robert Snyder    schedule 19.02.2014
comment
@RobertSnyder Это один из способов сделать это: использование модульных тестов немного лучше, чем работа с методом main, но еще лучше использовать язык с REPL для еще более быстрой обратной связи. Как профессиональный Java-программист, я просто предпочитаю использовать более легкие инструменты для решения небольших задач.   -  person Eric Wilson    schedule 19.02.2014


Ответы (1)


Несколько проблем. a и b должны быть статическими переменными-членами, если вы хотите, чтобы все ваши методы имели к ним доступ. problem() возвращает int, но только иногда. На самом деле не нужно ничего возвращать, поэтому я сделал это недействительным.

Эта версия распечатает первое число Фибоначчи больше 10, а затем остановится, но вы хотите, чтобы первое число было больше 4 миллионов, и вам нужна сумма чисел. Поэтому нам нужно следить за этим.

Также ваши начальные значения были 0 1 последовательность Фибоначчи должна начинаться и 1 и 2.

И, наконец, мы хотим суммировать только четные числа, мы можем сделать это, проверив, равно ли напоминание 0 при делении на два.

public class problem
{
    private static int a = 0;
    private static int b = 0;
    private static int sum = 0;

    public static void main (String args []){
        a = 1;    
        b = 2;
        problem();
        System.out.println("Sum = " + sum);
    }

    public static void problem(){
        if (b % 2 == 0)
        {
            sum = sum + b;
        }

        int c = a + b;
        if (c>=4000000)
        {
            return;
        }

        a = b;
        b = c;
        problem();
    }
}
person ansible    schedule 19.02.2014