【问题标题】:How to access values inside an array which hass been returned from a function in another class如何访问从另一个类中的函数返回的数组中的值
【发布时间】:2013-02-10 18:04:37
【问题描述】:

我在另一个类中有一个函数,它产生值并将所有这些值存储在一个数组中。然后我返回了这个数组,因为我需要返回一个项目。我在函数末尾做了一个 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;
    }
}
}

【问题讨论】:

  • 可能是因为您没有访问正确的数组。如果没有看到相关代码,或者更好的是SSCCE,就不可能回答您的问题。
  • 请发布示例代码!
  • @user2041029 我更新了我的答案。你能检查它是否有效吗?

标签: java jfreechart


【解决方案1】:

我看到至少三个错误:

  1. 花括号不正确

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

  3. 您调用了GetResults.outputArray[1];,但outputArray 是在方法内部定义的。如果您的代码可以编译,则意味着您的类中还有一个具有相同名称的 static 变量,这就解释了这种行为。

我假设你想要做的是

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多