-2

値を生成し、これらすべての値を配列内に格納する別のクラス内に関数があります。アイテムを返す必要があるため、この配列を返しました。値が保存されているかどうかを確認するように見える関数の最後にprintlnを実行しましたがSystem.out.println(outputArray[1]);、正しい値が返されます。この値は 3.68 です。

ただし、別のクラスから配列にアクセスしようとすると、配列内に格納されているすべての値ではなく、1 つの値 0 が返されます。System.out.println(outputArray[1]);その他のクラス内でもう一度実行したところ、3.68 ではなく 0 が生成されました。

関数からのインデックスに格納されている配列にアクセスして値を返さないのはなぜですか?

その関数から返された配列にアクセスしていないことに関係があると思います。この問題を解決したら、この別のクラス内でこれらの値を使用してグラフにプロットします。

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;
    }
}
}
4

1 に答える 1

0

少なくとも 3 つのエラーが表示されます。

  1. 中括弧が正しくありません

  2. getResults grおそらくGetResults gr(コピーペースト時のタイプミス?それは奇妙です...)

  3. 呼び出しますGetResults.outputArray[1];outputArray、メソッド内で定義されています。コードがコンパイルされる場合、それはstaticクラスにも同じ名前の変数があることを意味し、これが動作を説明しています。

あなたがやりたいことは

gr.tableOfresults()[1];

getResults grに変更する必要があることに注意してください

GetResults gr = new GetResults(); 

それが機能するために


もう 1 つの可能性は、tableOfresults関数を として定義しstatic、次のように呼び出すことです。

 GetResults.tableOfresults()[1];

この場合、行は必要ありませんが、次のように変更するgetResults gr必要がありますpublic double[] tableOfresults() {

public static double[] tableOfresults() {

関数から非静的変数にアクセスすると、これはコンパイルされないことに注意してくださいtableIfresults


少し奇妙だと思う3番目のケースは、実際に他のクラスから静的変数を呼び出したい場合です。この場合、そのままにしておく必要GetResults.outputArray[1];がありますが、次の変更を行います。

getResults grなるべき

(new GetResults).tableOfresults();

そしてreturn outputarray;なるべき

GetResults.outputarray = outputarray;

GetResults クラス内に outputArray の宣言を追加します。

public static double[] outputArray

4 つ目の可能性は、静的変数を呼び出し、さらに静的にすることです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
于 2013-02-10T18:29:17.123 に答える