gpt4 book ai didi

java - 将计算存储在数组中 - 第二次尝试

转载 作者:行者123 更新时间:2023-12-01 14:05:33 25 4
gpt4 key购买 nike

我是 Java 新手,目前正在尝试学习如何最好地在数组中存储数字。

我正在研究的具体问题是试图找到一种方法,通过将计算存储在数组中来更好地实现以下方法。

代码如下所示:

public static long myF(int N) {
long[] computedValues;
computedValues = new long[N+1];
computedValues[0] = 0;
computedValues[1] = 1;
for (int i = 2; i < computedValues.length ;i++){
computedValues[i] = computedValues[(i-1)]+computedValues[(i-2)];
System.out.println("array["+(i)+"] = "+computedValues[i]);
}
return computedValues[N-1];
}
public static void runMyF() {
for (int N = 0; N < 100; N++)
StdOut.println(N + " " + myF(N));
}


public static void main(String[] args) {
runMyF ();
}

此代码中的 Main 应该调用 runMyF(),然后 runMyF() 应该调用 myF()。我的问题是我无法得到 ComputedValues[0] = 0;计算值[1] = 1;包含在输出中,第二个问题是当 runMyF() 调用 myF() 时,即收到此错误消息:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
at algs11.MyFib.myF(MyFib.java:21)
at algs11.MyFib.runMyF(MyFib.java:30)
at algs11.MyFib.main(MyFib.java:37)

请问有什么帮助吗?@Dukeling,你的解决方案有点超出了我的工资等级(抱歉) - 我认为我的代码中有一些错误,我需要帮助来找到它们。谢谢。

最佳答案

  • 您递增了错误的变量。

    for (int i = 2; i < computedValues.length; N++){

    应该是

    for (int i = 2; i < computedValues.length; i++){

    请注意,N++ 已更改为 i++

  • 请记住初始化 compulatedValues[0]compulatedValues[1]。这应该出现在循环之前:

    computedValues[0] = 0;
    if (N > 0) // needed because when N = 0, the below will be out of bounds
    computedValues[1] = 1;
  • 应该是compulatedValues = new long[N+1];,否则数组就太小了。

  • 您需要返回正确的值 - 将 returnComputedValues[N]; 更改为 return 0;

额外效率:

我想重点是比较两种方法的效率。如果没有,您应该在函数外部将 compulatedValues 声明为 ArrayList,并在函数中根据需要添加到其中。这将导致您在程序的整个运行过程中只计算每个值一次。

static ArrayList<Long> computedValues = new ArrayList<Long>(Arrays.asList(0l,1l));

public static long myF(int N) {
for (int i = computedValues.size(); i <= N; i++){
computedValues.add(computedValues.get(i-1) + computedValues.get(i-2));
System.out.println("array[" + i + "] = " + computedValues.get(i));
}
return computedValues.get(N);
}

关于java - 将计算存储在数组中 - 第二次尝试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18938263/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com