2017-03-22 10 views
2

カップルの問題私はフィボナッチコードを持っています。配列(入力)内の5番の位置を探したい場合、システムはその位置が5であると言いますが、6と言うでしょうか?また、アレイにない番号を入力すると、システムは場所20(例入力200)にあることを示します。システムは "見つからない"と言わなければならない。Java fibonacci - 配列からのユーザ入力を見つけよう

int totalFibos=20; 
    int fibs[] = new int[totalFibos]; 

    int a=0; 
    int b=1; 
    int fib=0; 
    fibs[0]=0; 

    fibs[1]=1; 

    int fibCounter=2; 
    while(fibCounter<totalFibos) 
    { 
     fib=a+b; 
     a=b; 
     b=fib; 
     fibs[fibCounter]=fib; 
     fibCounter++; 
    } 
    System.out.println("\n\nThe first "+ totalFibos + " fibonacci numbers are: "); 
    int i=0; 

    while(i<totalFibos) 
    { 
     System.out.print(fibs[i]+" "); 
     i=i+1; 
    } 
    System.out.println(); 
    int userInput=0; 
    i=0; 
    Scanner sc= new Scanner(System.in); 
    int found=0; 
    while(userInput!=-1) 
    { 
     System.out.print("Enter a number to search,(enter -1 to end the search): "); 
     userInput= sc.nextInt(); 

     while (i<totalFibos) 
     { 
      if(userInput==fibs[i]) 
      { 
       found=1; 
       break; 
      } 
      i++; 
     } 
     if(found==1) 
      System.out.println("The number: " + userInput + " is found at location: "+ i++); 
        else if (found==0) 
          System.out.println("The number: "+ userInput + " is not found"); 
      } 

        if(userInput==-1) 
      System.out.println("\nThanks"); 
      } 



    } 
+0

おそらく、javaでは配列の添字が「0,1,2,3,4,5,6,7 ...」であるため、6ではなく5と表示されます。 – user7185318

+0

0 1 1 2 3 5 8 13 21など...配列にする必要があります(私が正しくした場合) – buliukko

答えて

1

は、あなたのリファクタリング、コードです:

int totalFibos=20; 
int fibs[] = new int[totalFibos]; 

int a=0; 
int b=1; 
int fib=0; 
fibs[0]=0; 

fibs[1]=1; 

int fibCounter=2; 
while(fibCounter<totalFibos) 
{ 
    fib=a+b; 
    a=b; 
    b=fib; 
    fibs[fibCounter]=fib; 
    fibCounter++; 
} 
System.out.println("\n\nThe first "+ totalFibos + " fibonacci numbers are: "); 
int i=0; 

while(i<totalFibos) 
{ 
    System.out.print(fibs[i]+" "); 
    i=i+1; 
} 
System.out.println(); 
int userInput=0; 
i=0; 
Scanner sc= new Scanner(System.in); 
int found=0; 
while(userInput!=-1) 
{ 
    System.out.println("Enter a number to search,(enter -1 to end the search): "); //Shouldnt this be println ? 
    userInput= sc.nextInt(); 
    i=0; //Reset it, else the second search would fail 
    found=0; //Reset it, else the second search would fail 
    while (i<totalFibos) 
    { 
     if(userInput==fibs[i]); 
     { 
      found=1; 
      break; 
     } 
     i++; //Change state of i 

    } 
    if (found==1) { //Wheres your bracket ? 
     System.out.println("The number: " + userInput + " is found at location: "+ Integer.toString(i+1)); //Just to be sure... 
    } 
    else if (found==0) { 
     System.out.println("The number: "+ userInput + " is not found"); 
    } 
} 
    if(userInput==-1) 
     System.out.println("\nThanks"); 
    } 

は、それが動作し、あなたがお役に立てば幸い!

+0

@buliukko:チートソリューション:ちょうどi + 1をi + 2に変更してください:) – user7185318

+0

ありがとうございました!!! – buliukko

3

";" sign after if文

if(userInput==fibs[i]); 
    { 
     found=1; 
     break; 
    } 

これは、{}内の式が常に実行される理由です。 ";" i ++を追加します。これが動作するにはwhileループのどこかにある。

更新: また、入力ごとにカウンタと結果をリセットしてください。これは、whileループ内の最初のものでなければなりません。ここで

found = 0; 
    i = 0; 
+0

ups!うん、私はそこにそれを持っていたが、私は問題を解決しようとしていたときにそれを削除したと思う...とにかく、トピックで言及したのと同じ問題 – buliukko

+0

すべての入力後に結果とカウンタをリセットする。私は答えを更新しました。 –

+0

ありがとうございます! :) – buliukko

関連する問題