【问题标题】:Copying columns from 2D array into object 1D array将列从二维数组复制到对象一维数组
【发布时间】:2016-05-01 12:30:09
【问题描述】:

我一直在尝试将二维数组的列复制到一维数组中。我创建的 Stock 类有一个名为 data 的 double[] 数组。最后一个循环尝试打印一些应该在第一个 Stock 对象中的值,但它实际上打印了最后一个对象中的值。

Stock arr[] = new Stock[numcols];   // creates array with the same n of slots as columns
        double[] temp = new double[numrows-1];

        for(int i=1; i<numcols; i++){
            for(int j=1; j<numrows; j++){
                temp[j-1] = fluct[j][i];
            }
            arr[i-1] = new Stock(temp, compName[i-1], price[i-1]);
        }
        for(int i=0; i<numrows/20; i++)
            System.out.println(arr[0].data[i] + arr[0].name);

事实上,如果我循环打印 arr[j].data[i] 它将为所有 j 打印相同的值。似乎循环正在为每个 Stock 创建具有相同值的所有对象,但我看不出它这样做的原因。

我已经检查了 2D 数组波动和所有值的顺序。我在位置 1 开始循环,因为位置 0 中的值不感兴趣。还尝试单独打印 temp[] 的值,它们是正确的,但对象中的数据仍然是错误的。

这是 Stock 对象(为简洁起见,省略了 getMean/getDev 方法):

public class Stock{
    public static double[] data;
    public static String name;
    public static double stDev;
    public static double price;
    public static double mean;

    public Stock(double[] newData, String newName, double newPrice){
        this.data = newData;
        this.name = newName;
        this.price = newPrice;
        this.mean = getMean();
        this.stDev = getDev();
    }
}

【问题讨论】:

    标签: java object multidimensional-array


    【解决方案1】:

    问题在于您是否定义了 temp 数组。您应该在第一个 for 循环中执行此操作:

    Stock arr[] = new Stock[numcols];   // creates array with the same n of slots as columns
    
    for(int i=1; i<numcols; i++){
        double[] temp = new double[numrows-1];
        for(int j=1; j<numrows; j++){
            temp[j-1] = fluct[j][i];
        }
        arr[i-1] = new Stock(temp, compName[i-1], price[i-1]);
    }
    for(int i=0; i<numrows-1; i++)
        System.out.println(arr[0].data[i] + arr[0].name);
    

    这样每个 arr 元素都会使用一个新的 temp。目前您正在使用相同的 temp 对象,它的值以及 arr 元素的值正在更新。 此外,我已将最后一个 for 循环的条件更改为 i&lt;numrows-i。不知道你为什么需要i&lt;numrows/20 =)

    祝你学习 Java 好运!

    【讨论】:

    • 感谢您的回复。我尝试在循环内声明 temp 但仍然得到相同的输出。还尝试在执行这些循环之前初始化 Stock 对象,但也没有用。在最后一个循环中,我除以 20,所以它只会打印几个值,否则我会等待打印所有值,并且有负载!再次感谢您
    • 这很奇怪....您是否尝试过在循环内同时声明temp 和在循环外同时声明Stock?如果是,那么输出应该相同,只有Stock 变量存在问题...tempStock 类型变量都应该在循环内定义。您介意将我的 sn-p 复制粘贴到您的代码中并查看它是否正常工作吗?
    • 尝试复制粘贴您的代码,它也没有工作,仍然得到相同的输出。我已经为 Stock 对象添加了代码,我怀疑这是我出错的地方。
    【解决方案2】:

    嗯,这很尴尬,但我终于弄清楚出了什么问题。在我的对象类中,我的变量是静态的!删除解决了它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-31
      • 1970-01-01
      • 2019-12-30
      • 1970-01-01
      • 2010-10-22
      • 2011-07-23
      • 1970-01-01
      • 2020-04-02
      相关资源
      最近更新 更多