【问题标题】:Initializing an array of doubles java初始化一个双精度数组java
【发布时间】:2011-11-27 21:55:06
【问题描述】:

我这辈子都无法理解为什么这段代码不起作用。我正在创建一个函数,以用户指定的频率在给定的 x 间隔内评估所有点的多项式。我的基础多项式代码与问题无关。我的问题是用我从霍纳的方法获得的值填充我的数组。

public double[] evalAt(double s, double f, int n) {
    double[] resultArray = new double[n];
    double h =((f - s)/(n));
    if(s==f) {
        double tempResult = 0;
        for (int i = this.degree; i >= 0; i--) {
            tempResult = tempResult * s + this.terms[i].getCoefficient();
        }
        resultArray[0] = tempResult;
    } else {
        int counter = 0;
        for(double i = s; i <= f; i=i+h) {
            double tempResult = 0;
            for (int j = this.degree; j >= 0; j--) {
                tempResult = tempResult * i + this.terms[j].getCoefficient();
            }
            System.out.println("Counter: " + counter + " Result @ Counter: " + tempResult);
            resultArray[counter++] = tempResult;
        }
        System.out.println(resultArray[0]);
        System.out.println(resultArray[1]);
        System.out.println(resultArray[2]);
        System.out.println(resultArray[3]);
    }
    return resultArray;
}

我在那里有一个print 语句来告诉我计数器的值和临时结果是什么。然后我使用resultArray['index'] = 'value'; 语法。当我运行它时,我看到计数器和值完全符合我的要求,但是当我使用底部的四个 print 语句检查数组时,什么也没有发生。我的输入是0,10,10

输出:

Counter: 0 Result @ Counter: 0.0
Counter: 1 Result @ Counter: 1.0
Counter: 2 Result @ Counter: 4.0
Counter: 3 Result @ Counter: 9.0
Counter: 4 Result @ Counter: 16.0
Counter: 5 Result @ Counter: 25.0
Counter: 6 Result @ Counter: 36.0
Counter: 7 Result @ Counter: 49.0
Counter: 8 Result @ Counter: 64.0
Counter: 9 Result @ Counter: 81.0
Counter: 10 Result @ Counter: 100.0

【问题讨论】:

  • 你为什么不修正你的缩进再看一遍呢?我的猜测是括号并没有像你想象的那样做。
  • 这两种解决方案都没有奏效,尽管我很欣赏及时的回答。
  • 那么最后 4 个打印语句的输出是什么?你说“什么都没有发生”,但你的意思是什么?它不执行那些语句吗?它是否会抛出一个在某处被吞没的异常?您是否尝试过使用调试器单步执行以查看确切执行了哪些行?
  • 您的代码是在您提供的输出之后终止,还是继续运行? (即它是否挂在某个地方?)
  • 我认为,如果您发布人们可以实际运行的代码,说明您得到了什么以及预期的输出是什么,您将获得最好的帮助。尝试将您的代码缩减为可能存在错误的最小示例。

标签: java arrays loops initialization double


【解决方案1】:

我强烈怀疑它会抛出一个 ArrayIndexOutOfBoundsException,该异常会在此方法之外被吞没。

您正在创建一个大小为 n 的数组,在本例中为 10,但您的计数器从零变为 f(也是 10),总共有 11 个元素。所以至少在其中一个中存在一对一。

查看您的代码并找到显示的部分

catch (Exception e) {
}

并将其更改为

catch (Exception e) {
    e.printStackTrace();
}

帮助更轻松地捕获此类错误。

【讨论】:

  • 我在程序的其他地方处理异常,它实际上是一个数组越界异常......非常感谢大家!
  • 进行心理检查 where n=1 你想要两个结果,在开头和结尾。 resultArray[] 的尺寸必须为 2,而不是 1。所以你的第二行必须是 [n+1]。
【解决方案2】:

不幸的是,我还不能发布 cmets,因为这不是一个具体的答案,但我已经检查并运行了你的代码,它对我来说运行良好。替换为固定系数和度数表明括号很好,并且您没有(正如我怀疑的那样)在内部范围内重新初始化 resultArray 变量。

这是您有问题代码的直接复制/粘贴吗?

通常,当我遇到这样的问题时,它与赋值无关,而是因为“resultsArray”实际上是我错误分配的 2 个不同的变量,但由于多态性,我没有收到任何错误。

【讨论】:

  • 是的,这是直接复制和粘贴。当我使用 '0' 而不是 counter++ 时,我会在第 0 元素中得到最后一个 tempResult(因为它在循环结束之前被覆盖),然后所有其他元素都会显示 0.0 作为它们的内容。感谢您的快速回复!
  • 不客气 :) 在您的帖子中,当您打印出 resultArray 内容时,您说“什么都没有发生”,您到底看到了什么?你的意思是什么都没有印我们的或价值观是错误的?
  • 如果您没有得到任何输出,那么我会说您应该将整个方法内容包装在 try{} catch (Throwable x) { x.printStackTrace();因为我认为(可能)你可能会得到一个 ArrayIndexOutOfBoundsException 但捕获它而不是在某处打印它?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-30
  • 2019-06-29
  • 1970-01-01
  • 2020-05-24
  • 2014-11-13
相关资源
最近更新 更多