簡體   English   中英

從數組中打印特定值

[英]Printing a particular value from an array

如何為任何特定索引打印斐波那契函數的值,比如n,其中n是提供的參數值?

1 import java.util.Arrays;
2 
3 public class Fibonacci {
4
5 public static void main(String[] args) {
6   int n = Integer.parseInt(args[0]);
7   if(n<3){
8       return;
9   }else{
10      int[] f = new int[n];
11      f[0] = 1;
12      f[1] = 1;
13      int i= 0;
14      for(i=2; i<f.length; i++){
15          f[i]= f[i-1]+ f[i-2];
16      }
17      System.out.println(f[i]);
18  }
19  
20 }
21
22 }

我相信你遇到的問題是System.out.println(f[i]);

在這個位置, i將等於f[]長度。 如果您使用i作為索引,它將超出范圍。

如果要打印最后一個值,則應為System.out.println(f[i-1]);

您正在打印f[i] ,它將為您提供ArrayIndexOutOfBoundsException因為此時i值越過數組f的邊界。

一個簡單的解決方法是通過采用這樣的單獨變量來打印數組:

int n = Integer.parseInt(args[0]);
if(n<3){
    return;
}else{
    int[] f = new int[n];
    f[0] = 1;
    f[1] = 1;
    int i= 0;
    for(i=2; i<f.length; i++){
        f[i]= f[i-1]+ f[i-2];
     }

     for (int j=0;j<n;j++){
     System.out.println(f[j]);
    }
}

如果要打印任何特定索引,則可以在打印前進行一次邊界檢查:

int index=5;
if(index<f.length){
    System.out.println(f[index]);
}

你的代碼基本上沒問題,但我在回復中調整了一些內容:

public static void main(String[] args) {
    int n = Integer.parseInt(args[0]);
    if (n < 0) {
        System.out.println("Cannot computer Fib() of a negative number.");
        return(0);
    } else if (n < 3) {
       System.out.println("Fib[" + n + "] = 1");
    } else {
        int[] f = new int[n];
        f[0] = 1;
        f[1] = 1;
        for(int i=2; i < f.length; ++i) {
            f[i] = f[i-1]+ f[i-2];
        }
        System.out.println("Fib[" + n + "] = " + f[n - 1]);
    }
}

我認為以遞歸的方式使Fibonachi更好:

public int fib(int n) {
    if (n < 2) {
       return n;
    }
    else {
       return fib(n-1)+fib(n-2);
    }
    System.out.println(n);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM