2017-10-29 5 views
0

これは、12年生のコンピューターサイエンスクラスの課題です。次のようにプライムフィボナッチ数の横にテキスト通知を印刷するにはどうすればよいですか?

私は難しさを持っています割り当てのセクションは、読み取ります

  • 素数最初の20のフィボナッチ数の決定します。

  • 基本的な挑戦からプリントアウトに "これは素数です"というテキスト通知を入れてください。

  • FibPrimesはFibPrimesという配列に格納します。ここで

は私がしようとしたものである:

を下近く、私は与えられたFibNum要素がFibPrimeに等しかった場合は、テキスト通知が「これが素数である」印刷したループを作ることを試み素子。これはうまくいかなかった。 問題ブロックはコメントで識別されます。残りのプログラムは大丈夫です。

package fibonaccinumbers; 

public class FibonacciNumbers { 

    public static void main(String[] args) { 

     // Creation of Fibonacci Numbers Array. 
     int [] FibNums = new int[20]; 
     FibNums[0] = 0; 
     FibNums[1] = 1; 

     // Creation if Fibonacci Primes Array. 
     int [] FibPrimes = new int[7]; 
     FibPrimes[0] = 2; 
     FibPrimes[1] = 3; 
     FibPrimes[2] = 5; 
     FibPrimes[3] = 13; 
     FibPrimes[4] = 89; 
     FibPrimes[5] = 233; 
     FibPrimes[6] = 1597; 

     // Printing first two fibonacci numbers. 
     System.out.println(0); 
     System.out.println(1 + "*"); 

     // Printing remaining fibonacci numbers up to 20th term. 
     for (int i=2; i<FibNums.length;i++){ // Begin number generation loop. 
      FibNums[i] = FibNums[i-1] + FibNums[i-2]; 

      // Checks if the fibonacci number is odd. 
      // A number is not odd if two divides into it evenly. 
      boolean oddcheck = true; 
      if (FibNums[i]%2==0){ 
       oddcheck = false; 
      } 

      // Prints odd fibonacci numbers with a star beside it. 
      // Prints even fibonacci numbers with no star beside it. 
      if (oddcheck == true){ 
      System.out.println(FibNums[i] + "*"); 
      } else { 
      System.out.println(FibNums[i]);  
      } 

      // PROBLEM BLOCK HERE. ************************ 
      // If any element in the FibPrimes array is equal to the FibNums 
      // array, then the number is a prime. 
      for (int n=0; n<=FibPrimes.length; n++){ 
       if (FibNums[i] == FibPrimes[n]){ 
        System.out.print(" " + "This is a prime."); 
       } 
      } 


     } // End number generation loop. 

    } 

} 

除去問題ブロックと出力:

0 
1* 
1* 
2 
3* 
5* 
8 
13* 
21* 
34 
55* 
89* 
144 
233* 
377* 
610 
987* 
1597* 
2584 
4181* 

(星が奇数番号を識別 - 割り当ての異なる部分から)

出力問題ブロックと残り:

0 
1* 
1* 

残りの数字は印刷されず、テキスト通知もないことに注意してください。

私が現在持っているよりも問題を解決する可能性は高いですが、私はこれを改訂し続けます。これ以上の情報が必要な場合はお知らせください。ありがとうございました。

@AJNeufeldと@YayPawSiありがとうございました。あなたのソリューションを使って、プログラムを印刷することができました。 改訂出力:

0 
1* 
1* 
This is a prime. 2 
This is a prime. 3* 
This is a prime. 5* 
8 
This is a prime. 13* 
21* 
34 
55* 
This is a prime. 89* 
144 
This is a prime. 233* 
377* 
610 
987* 
This is a prime. 1597* 
2584 
4181* 
+0

ようこそ!推測すると、あなたのプログラムは 'for(int n = 0; n <= FibPrimes.length; n ++)をループするため、おそらく' ArrayIndexOutOfBoundsException'でクラッシュしていると言えます。最後の反復は配列の終わりを超えてインデックス付けされます。 – AJNeufeld

+1

私は、あなたの課題が事前にプライムフィナンシティー番号を調べて、それらの配列を(あなたがしたように)保存するとは期待していません。フィボナッチ数がプライムであるかどうかを計算して、FibPrimesに格納しておかなければならないと確信しています。 –

+0

@StephenCこのコメントありがとうございます。あなたは間違いなく正しいと思います。割り当てが難しいため、私の最優先事項は「機能する」ものを作ることでした。これは私の次の目標です。 –

答えて

0

これはArrayIndexOutOfBoundExceptionで、スタックオーバーフローに

//Remove = sign for n < FibPrimes.length 
    for (int n = 0; n < FibPrimes.length; n++){ 
      if (FibNums[i] == FibPrimes[n]){ 
       System.out.print(" " + "This is a prime."); 
      } 
    } 
関連する問題