Домашняя работа Фибоначчи - Java - PullRequest
0 голосов
/ 22 октября 2011

Нам пришлось создать систему Фибоначчи.Не могли бы вы сказать мне, что я сделал не так?Это дает мне ошибку в цикле while, но я уверен, что именно так я и построил свои переменные.

public class Chapter3 {
    public static void main (String args[]){  
        int numFn;//CREATE NUMBER OF FN, SUM OF FN, AND AVERAGE   
        int average[]=new int [0];
        int sumFn []=new int [0];//ARRAY OF SUMFN        
        numFn = 1;//ASSIGN FN AS 1           
        int x = 0;//NUMBERIN SIDE FN ARRAY         
        int Fn []=new int[16];//CREATE FN ARRAY       
        Fn [0]=0;    

        while (numFn <15){
            Fn[x]= Fn[x]-Fn[x-1];//SET THE CURRENT FN NUMBER
            sumFn [x]=sumFn[x]+(sumFn[x-1]+Fn[x]);//SET CURRENT SUMFN NUMBER
            average [x]= sumFn[x]/numFn;

            System.out.println(numFn +"/t" +Fn+"/t" +sumFn+"/t" +average);
            x++;
            numFn++;
        }
    }
}

хорошо, я изменил его, используя советы ребят, но первый результат равен 1, а затем 0 длявсе, использовал этот код:

           public class Chapter3 {
        public static void main (String args[]){
          int numFn;//CREATE NUMBER OF FN, SUM OF FN, AND AVERAGE
        int average[]=new int [16];
        int sumFn []=new int [16];//ARRAY OF SUMFN
        numFn = 1;//ASSIGN FN AS 1
        int x = 1;//NUMBERIN SIDE FN ARRAY
        int Fn []=new int[16];//CREATE FN ARRAY
        Fn [0]=0;



    while (numFn <15){
        Fn[x]= Fn[x]-Fn[x-1];//SET THE CURRENT FN NUMBER
        sumFn [x]=sumFn[x]+(sumFn[x-1]+Fn[x]);//SET CURRENT SUMFN NUMBER
        average [x]= sumFn[x]/numFn;

        System.out.println(numFn +"\t" +Fn[x]+"\t" +sumFn[x]+"\t" +average[x]);
        x++;
        numFn++;
    }


}

}

Ответы [ 5 ]

4 голосов
/ 22 октября 2011

Несколько проблем:

  1. new int [0] означает пустой массив, который не является тем, что вы хочу.
  2. Значение X равно 0 при первом выполнении цикла, поэтому Fn [X-1] равно Fn [-1], что вызовет ArrayOutOfBoundException.

Не могли бы вы также более подробно рассказать об ошибке, с которой вы столкнулись?

2 голосов
/ 22 октября 2011

Я думаю, это то, что вам нужно (этот код начинается с 1 и 1 и печатает первые 20 терминов) ...

public class Fibonacci {   
    public static void main(String[] args) {     
        int n0 = 1, n1 = 1, n2;    
        System.out.print(n0 + " " + n1 + " ");
        for (int i = 0; i < 18; i++) { // Loop for the next 18 terms
            n2 = n1 + n0; //The next term is the sum of the previous two terms
            System.out.print(n2 + " ");       
            n0 = n1; // The first previous number becomes the second previous number...       
            n1 = n2; // ...and the current number becomes the previous number     
        }     
        System.out.println();
    }
} 

Что касается ваших ошибок, прочитайте другие ответы. Их совет хорош. :)

1 голос
/ 22 октября 2011

Ваш массив sumFn объявлен с длиной 0. Поэтому каждый раз, когда вы пытаетесь добавить к нему какой-либо элемент, вы получите ArrayOutOfBoundException.

0 голосов
/ 15 октября 2013

Это действительно помогло решить упражнение последовательности Фибоначчи. Однако ноль не печатается, поэтому я добавил сюда ...

/*
 * FibonacciSequence.java
 * ----------------------
 * This program displays the values in the Fibonacci sequnece from F0 to F15.
*/

import acm.program.*;

public class FibonacciSequence extends ConsoleProgram{
     public void run() {     
            int n0 = 1;
            int n1 = 1;
            int n2;    
            println("0" + "\n" + n0 + "\n" + n1);
            for (int i = 0; i < 13; i++) { // Loop for the next 18 terms
                n2 = n1 + n0; //The next term is the sum of the previous two terms
                println(n2 + " ");       
                n0 = n1; // The first previous number becomes the second previous number...       
                n1 = n2; // ...and the current number becomes the previous number     
            }     
            println();
        }
}
0 голосов
/ 22 октября 2011

Есть несколько проблем с кодом, даже после исправления той, которая вызывает ArrayIndexOutOfBoundsException. Я сомневаюсь, что это будет работать. Для начала вы должны инициализировать массивы, которые вы используете, в правильном размере:

int average[]=new int [16];
int sumFn []=new int [16];

Переменная «x» должна начинаться с 1:

int x = 1;

Кроме того, неясно, что вы хотите напечатать, в любом случае оператор println() должен быть исправлен

System.out.println(numFn +"\t" +Fn[x]+"\t" +sumFn[x] + "\t" +average[x]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...