2017-10-12 12 views
-3

ユーザーが数字を入力し、コンソールがフィボナッチ数であるプログラムを作成しようとしています。 fibbonaci fib = new fibonacciのようなものが私のプログラムを止めている理由を調べるのに困っています。コンピュータがその行を読み取ると、コードの実行が停止します。メインメソッドで非静的メソッドを呼び出す方法

編集:回答ありがとうございましたが、まだ理解に問題があります。エラーが修正されるようにコードを書き直してください。ありがとう!

編集:私はすべての助けをいただきありがとうございました!

import java.util.Scanner; 

public class fibonacci { 
    Scanner fnumber = new Scanner (System.in); 
    int input = fnumber.nextInt(); 
    int f1 = 1; 
    int f2 = 1; 
    int answer = f1 + f2; 

    public int fibonacci(int input) { 
     for(int f2 = 1; f2<input; f2++) { 
      int answer = f1 + f2; 
      f1 = f2; 
      f2 = f2 + 1; 
     } 
     return answer; 
    } 

    public static void main(String args[]){ 
     System.out.println("please enter a number"); 
     Scanner fnumber = new Scanner (System.in); 
     int input = fnumber.nextInt(); 
     System.out.println("The " + input + "th number of the fibonacci sequence is " + fib.fibonacci(input)); 
    } 
} 
+0

あなたのメソッド 'public int fibonacci(int input)'には、別の名前を付ける必要があります。あなたのクラスと同じ名前を持つべき唯一のメソッドはコンストラクタです。また、あなたの変数 'f1'、' f2'、そして 'answer'はあなたのメソッドの中で宣言されるべきです、それらがインスタンス変数である理由はありません。フィボナッチクラスの上から 'input'と' fnumber'の宣言を取り除くと、それらは使われません。 – Flaom

+0

私は他にもいくつかのことを見ています。あなたが 'int答え'〜 'for'ループと言うとき、これは新しい変数です(あなたのクラスのフィールドではありません)。あなたが '返答'を返すと、ループの中で変更されていないフィールド(同じ名前のもの)が返されます。 'for'ループのオープン時の' int f2 = 1; '宣言と同じです。 – user2478398

+0

そしてあなたのforループの中で、あなたは初期化された後に決して使われない別の 'answer'変数を初期化しています。 forループ内の 'answer'から' int'型指定子を削除してください。 – Flaom

答えて

0

クラスのオブジェクトを作成する必要があります。 mainメソッド(静的)でobjectを使用してメソッドを呼び出します。

fibonacci fib = new fibonacci(); 
fib.fibonacci(input); 
0

メインでフィボナッチクラスをインスタンス化します。

fibonacci f = new fibonacci(); 
f.fibonacci(input); 

また、クラス(およびファイル)の名前をフィボナッチにする必要があります。クラス名は常に大文字の最初の文字を持ちます。

関連する問題