如何访问从另一个类中的函数返回的数组内的值

时间:2013-02-10 18:04:37

标签: java jfreechart

我在另一个类中有一个函数,它产生值并将所有这些值存储在数组中。然后我返回了这个数组,因为我需要返回一个项目。我在函数的末尾做了一个println,它看起来像System.out.println(outputArray[1]);,看看是否存储了值,它确实返回了正确的值。该值为3.68。

然而,当我尝试从另一个类访问数组时,我只得到1个值为0而不是存储在数组中的所有值。我在其他类中再次执行了System.out.println(outputArray[1]);,它生成了0而不是3.68。

为什么它不能访问并返回存储在该函数的索引处的数组中的值?

我认为这与我无法从该函数访问返回的数组有关。一旦我解决了这个探测,我将在这个其他类中使用这些值来绘制图形。

public class GetResults{

public double[] tableOfresults() {
    double[] outputArray = new double[100];

    for(int i = 0; i<100; i++) {

       //At this point I calculate results and store them in the array using i as the index of the array

    }
    System.out.println(outputArray[1]); // produces 3.68 here
    return outputarray;


public class graph{
    getResults gr
    public XYSeries inputOutputGraph() {
        XYSeries graph = new XYSeries("My graph");
        XYDataset xyDataset = new XYSeriesCollection(graph);
        System.out.println(GetResults.outputArray[1];) //Its produces 0 here
        JFreeChart chart = ChartFactory.createXYLineChart(
            "Graph", "Time", "results",
            xyDataset, PlotOrientation.VERTICAL, true, true, false);
        ChartFrame graphFrame = new ChartFrame("XYLine Chart", chart);
        graphFrame.setVisible(true);
        graphFrame.setSize(300, 300);
        return graph;
    }
}
}

1 个答案:

答案 0 :(得分:0)

我发现至少有三个错误:

  1. 花括号不正确

  2. getResults gr应该是GetResults gr(复制粘贴时错字?这很奇怪......)

  3. 您致电GetResults.outputArray[1];但在方法内定义了outputArray。如果您的代码编译,这意味着您的类中也有一个static变量具有相同的名称,这解释了行为。

  4. 我认为你想要做的是

    gr.tableOfresults()[1];
    

    请注意,您必须将getResults gr更改为

    GetResults gr = new GetResults(); 
    

    让它工作


    另一种可能性是您希望将tableOfresults函数定义为static,并将其调用如下

     GetResults.tableOfresults()[1];
    

    在这种情况下,不需要行getResults gr,但您应该将public double[] tableOfresults() {更改为

    public static double[] tableOfresults() {
    

    请注意,如果从tableIfresults函数访问非静态变量,则无法编译。


    第三种情况,我认为有点奇怪,如果你想从另一个类实际调用一个静态变量。在这种情况下,您应该保留GetResults.outputArray[1];,但请执行以下更改:

    getResults gr应该成为

    (new GetResults).tableOfresults();
    

    return outputarray;应该成为

    GetResults.outputarray = outputarray;
    

    在GetResults类

    中添加outputArray的声明
    public static double[] outputArray
    

    第四种可能性是你想要调用静态变量,并使tableOfresults()静态。在这种情况下,您希望GetResults.outputArray[1];保持不变,但您需要:

    getResults gr应该成为

    GetResults.tableOfresults();
    

    return outputarray;应该成为

    GetResults.outputarray = outputarray;
    

    public double[] tableOfresults() {应该成为

    public static double[] tableOfresults() {
    

    在GetResults类

    中添加outputArray的声明
    public static double[] outputArray