2016-10-01 5 views
-4

Я пытаюсь создать программу, которая находит сумму четных чисел ниже 4 миллионов последовательности Фибоначчи. Я знаю, что есть намного более простой способ сделать это, но я хотел посмотреть, будет ли он работать с массивами. Я никогда раньше не использовал массивы, поскольку я довольно новичок в Java, поэтому я хотел посмотреть, работает ли это с массивами. Основная проблема, с которой я столкнулся, - это оператор for. Как я могу увидеть, если содержимое fibarray [i] меньше 4000000?fibonacci в Java

Также, это нормально, если я делаю это с fibarray = new int[i]?

public static void main(String[] args) { 
     int[] fibarray; 
     int numcount = 0; 
     int i = 0; 
     long sum = 0; 
     fibarray = new int[i]; 
     fibarray[0] = 0; 
     fibarray[1] = 1; 

     for(i = 0 , fibarray[i] < 4000000, i++;;){ 
      fibarray[i] = fibarray[i - 1] + fibarray[i - 2]; 


     } 
    } 

Прошу прощения, если это звучит действительно глупо. Любая помощь будет высоко оценена. Спасибо.

+8

Почему, на ваш взгляд, это не сработает? – assylias

+1

Что вы имеете в виду при попытке получить индекс имени класса? Прежде всего вам нужно создать объект, скажем, 'ArrayList a = новый ArrayList <>()' или 'int [] a = new int [capacity]'. После этого нет никакой проблемы в использовании такой конструкции, как вы упомянули 'if (a [i]> 4000)'. – Bashalex

+0

@Bashalex Не нужно упоминать ArrayLists. У них разный синтаксис, и основная проблема OP связана с синтаксисом массива. – hexafraction

ответ

-1

Смотрите комментарии в коде:

public static void main(String[] args){ 
    /************************* 
    * comments on your code 
    int[] fibarray; //use right java naming convention 
    int numCount = 0; //this variable is never used 
    int i = 0; 
    long sum = 0; 
    fibarray = new int[i];//you initialize an array of size 0. 
    fibarray[0] = 0; //you can't set value to array of size 0 
    fibarray[1] = 1; //you can't set value to array of size 0 

    //wrong syntax 
    for(i = 0 , fibarray[i] < 4000000, i++;;){ 
    //use for(i = 0 ; fibarray[i] < 4000000; i++){ 

     fibarray[i] = fibarray[i - 1] + fibarray[i - 2]; 
    } 

    *******************************/ 
    //Alternative code 
    //you don't need to keep all Fibonachi numbers found. 
    //you only use 3 numbers for every calculation 
    int size = 3; 
    int totalLimit = 4000000; 
    int[] fibArray = new int[size]; 
    fibArray[0] = 0; fibArray[1] = 1; 
    int total = 0; 

    while(true) { 

     fibArray[2] = fibArray[0] + fibArray[1] ; 

     if((fibArray[2]%2) ==0) { //even number 

      if((total + fibArray[2]) >= totalLimit) { 
       break; 
      } 

      total += fibArray[2]; 
     } 

     fibArray[0] = fibArray[1] ; 
     fibArray[1] = fibArray[2] ; 
    } 

    System.out.println("Total "+ total); 
} 

Не не стесняйтесь просить разъяснений по мере необходимости.

+0

У меня проблемы, которые вы внесли в комментарии довольно много. Я видел, что я сделал неправильно сейчас. Благодаря! –

+0

Рад, что это помогает. Вы читали http://stackoverflow.com/help/someone-answers? – c0der

+0

Нет проблем, я буду следовать этому в будущем. Еще одна вещь, которую я хотел бы спросить, - как мне сравнить содержимое массива [x] с номером? Могу ли я использовать символы> и <, чтобы сравнить содержимое массива с числом? –

0

Ну, что вам нужно, чтобы начать свой цикл с I = 2. И цикл должен быть в этом синтаксисе

for(i = 2; fibarray[i] < 4000000; i++) { 
    fibarray[i] = fibarray[i - 1] + fibarray[i - 2]; 
} 
+0

Как установить размер fibarray? – c0der

+0

@ c0der вы установили его с помощью int [] fibarray = new int [size_of_array]; – Josiah

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