首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法输出所需的输出

无法输出所需的输出
EN

Stack Overflow用户
提问于 2019-09-04 14:46:02
回答 1查看 29关注 0票数 0

因此,我正在创建一个程序,从两个不同的文件读取客户详细信息和订单详细信息。我创建了读取文件的方法,将数据存储在客户的对象中,然后将客户的对象添加到链接列表中。现在,当我尝试对订单文件执行相同的操作时,我得到了错误的输出。因此,在下面显示的代码中,我试图检查按顺序输入的客户名称是否与存储在customer链接列表中的名称相匹配。所以假设我在order.txt文件中有两行:

代码语言:javascript
复制
Ord101 true James
Ord102 false Jim

通过我所做的工作,我得到了以下输出:

代码语言:javascript
复制
Ord102 false Jim
Ord102 false Jim

而不是得到正确的输出,即:

代码语言:javascript
复制
Ord101 true James
Ord102 false Jim

因为James和Jim都是客户文件和链接列表中的名字。下面是我读取订单文件的代码:

代码语言:javascript
复制
public void readFileOrder() {
Scanner y;
String b,c,d;
LinkedList<Customers> list=new LinkedList<Customers>(); //another method was already created to add data inside list and its working so list contains data

LinkedList<order> list1=new LinkedList<order>();
Boolean isOpen;
order Order1=new order();
while(y.hasNext())
{

b=y.next();
isOpen=y.nextBoolean();
d=y.next();
System.out.println(list);
Customers customers1=new Customers();
for(int i=0;i<list.size();i++)    //this is where i'm checking if the customer name in the order file matches the value in list
{
 if(list.get(i).getName().equals(d))
  {
   customers1=list.get(i);
   Order1.setCustomer(customers1);
Order1.setName(b);
Order1.setIsOpen(isOpen);
list1.add(Order1);
   }
}


}

for(int j=0;j<list1.size();j++)
{
System.out.println(list1.get(j).getCustomer()+" and "+list1.get(j).getName()+" and "+list1.get(j).getIsOpen());
}
}

以防万一,下面提供的是客户和订单类:

代码语言:javascript
复制
import java.util.LinkedList;

public class Customers {
    @Override
    public String toString() {
        return "Customers [Name=" + Name + ", age=" + age + ", email=" + email + ", Address=" + Address + "]";
    }
    String Name;
    int age;
    String email;
    String Address;
    public String getName() {
        return Name;
    }
    public void setName(String name) {
        Name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    public String getAddress() {
        return Address;
    }
    public void setAddress(String address) {
        Address = address;
    }
    public void removeCustomer(String name2, LinkedList<Customers> list) {
        for(int k=0;k<list.size();k++)
        {
            if(list.get(k).getName().equals(name2))
            {
                list.remove(list.get(k));
            }
        }

    }


}

订单类别:

代码语言:javascript
复制
import java.util.LinkedList;

public class order{
String name;
Boolean isOpen;
Customers customer;
String cusName;
public order() {
    super();

}
public String getName() {
    return name;
}
public order(Customers customer) {
    super();
    this.customer = customer;
}
public void setName(String name) {
    this.name = name;
}
public Boolean getIsOpen() {
    return isOpen;
}
public void setIsOpen(Boolean isOpen) {
    this.isOpen = isOpen;
}
public String getCustomer() {
    return customer.getName();
}
public void setCustomer(Customers customer) {
    this.customer=customer;
    this.cusName=customer.getName();
}
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-04 14:56:51

您要一次又一次地向列表添加对同一个order的引用,每次都覆盖在循环的前一次迭代中设置的属性。相反,在循环中创建一个new order

换句话说,改变这一点:

代码语言:javascript
复制
order Order1=new order();
while(y.hasNext()) {

对此:

代码语言:javascript
复制
while(y.hasNext()) {
    order Order1=new order();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57790882

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档