Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:项目链表问题_Java_Linked List - Fatal编程技术网

Java:项目链表问题

Java:项目链表问题,java,linked-list,Java,Linked List,我以前使用过字符串、双精度等的链表,它们总是完全按照预期工作。但现在我正在形成一个项目的链接列表,每当我向列表中添加一个新元素时,列表中的所有对象显然都与最后一个对象相等 基本代码如下: import java.util.*; public class Global { static public LinkedList<StockInfo> DiaryStocks = new LinkedList<StockInfo>(); static public cl

我以前使用过字符串、双精度等的链表,它们总是完全按照预期工作。但现在我正在形成一个项目的链接列表,每当我向列表中添加一个新元素时,列表中的所有对象显然都与最后一个对象相等

基本代码如下:

import java.util.*;

public class Global
{

  static public LinkedList<StockInfo> DiaryStocks = new LinkedList<StockInfo>();

  static public class StockInfo    //info related to each stock in diary
  {
    String recordDate;             
    String ticker;
    int   status;                  
    String buyDate;
    String sellDate;
    double buyPrice;
    double sellPrice;
    double nmbrShares;
  }//StockInfo

//The following function places the Diary data for a stock in the arraylist

 static public void AddDiaryData(StockInfo thisdata)
  {
    String tckr;
    int i;

    DiaryStocks.add(thisdata);

    for (i = 0; i < DiaryStocks.size(); i++)   //this is debug code
    {
      tckr = DiaryStocks.get(i).ticker;
    }
  } 
}
import java.util.*;
公共类全球
{
静态public LinkedList DiaryStocks=new LinkedList();
静态公共类StockInfo//与每个库存日志相关的信息
{
字符串记录日期;
弦乐器;
智力状态;
字符串日期;
字符串日期;
双倍买入价;
双倍售价;
双股;
}//股票信息
//以下函数将股票的日记数据放在arraylist中
静态公共void AddDiaryData(StockInfo thisdata)
{
字符串tckr;
int i;
添加(此数据);
对于(i=0;i
正如我所说的,当单步执行底部附近的调试代码时,每次我向列表中添加一个新项时,列表的大小都会按应有的大小增长,但tckr项只对应于最后添加的项

对这个谜题的任何见解都将不胜感激


John Doner

问题超出了您提供的代码范围。您很可能正在添加相同的
StockInfo
实例。也许你有这样的想法:

StockInfo info = new StockInfo();
for (...) {
   info.setFoo(..);
   info.setBar(..);
   AddDiaryData(info);
}
您应该而不是重用这样的实例。每次都应该创建一个新实例


作为旁注-Java中的方法名称应以小写字母开头。

问题不在您提供的代码范围内。您很可能正在添加相同的
StockInfo
实例。也许你有这样的想法:

StockInfo info = new StockInfo();
for (...) {
   info.setFoo(..);
   info.setBar(..);
   AddDiaryData(info);
}
您应该而不是重用这样的实例。每次都应该创建一个新实例


作为旁注-Java中的方法名称应该以小写字母开头。

从您描述的症状来看,似乎您总是在列表中添加对同一
StockInfo
对象实例的引用,而不是每次都添加对新副本的引用

当使用新条目的内容更新该对象时,所有列表条目都会发生更改以反映最新条目


这个问题不在您发布的代码片段中,可能在
AddDiaryData
方法的调用方中。

从您描述的症状来看,似乎您总是在列表中添加对同一
StockInfo
对象实例的引用,而不是每次都添加对新副本的引用

当使用新条目的内容更新该对象时,所有列表条目都会发生更改以反映最新条目

这个问题不在您发布的代码片段中,可能在
AddDiaryData
方法的调用方中。

Ooops

深度复制请搜索

DiaryStocks.add(thisdata);
您应该创建
new StockInfo()
,然后添加到列表中,否则您将添加引用,并将所有项目引用均衡到最后一个项目中

深度复制请搜索

DiaryStocks.add(thisdata);

您应该创建
new StockInfo()
,然后添加到列表中,否则您会添加引用,并使所有项目引用与最后一个项目相等

您能否澄清“但tckr项目仅对应于最后添加的项目”的含义?每次通过循环时,您都会覆盖tckr变量,因此在循环之后,它将始终设置为最后一项。你是说它在循环中每次都被赋予相同的值吗?我们是否假设您的数据对此变量具有不同的值?您能否澄清“但tckr项目仅对应于最后添加的项目”的含义?每次通过循环时,您都会覆盖tckr变量,因此在循环之后,它将始终设置为最后一项。你是说它在循环中每次都被赋予相同的值吗?我们是不是要假设你的数据对于这个变量有不同的值?