【问题标题】:Printing ArrayList contents of type Data gives the wrong output {Java}打印 Data 类型的 ArrayList 内容会给出错误的输出 {Java}
【发布时间】:2022-02-01 15:17:19
【问题描述】:

我有一个 data 类型的 ArrayList(它存储了一个名为 name 的字符串和一个名为 age 的整数)。打印 Arraylist 的内容时,它会打印正确的年龄,但与我上次添加的元素的名称相同。 这是 PrintCollection 方法

import java.util.*;
import java.util.Iterator;
public class Lab5 {
  public static void PrintCollection(Collection<Data> c)
  {
    for (Iterator<Data> iter = c.iterator(); iter.hasNext();)
    {
        Data x = (Data)iter.next();
        x.Print();
    }
    System.out.println();
  }

}

这里是数据类

import java.util.ArrayList;

public class Data 
{
    public static String name;
    private int age;
    Data(String n,int a)
    {
        name = n;
        age = a;
    }
    public String GetName()
    {
        return(name);
    }
    public void SetName(String n)
    {
        name = n;
    }
    public int GetAge()
    {
        return(age);
    }
    public void SetAge(int a)
    {
        age = a;
    }
    public void Print()
    {
        System.out.print(("("+GetName()));
        System.out.print(",");
        System.out.print(GetAge());
        System.out.print(") ");
    }
    public static void main(String args[])
    {
        ArrayList<Data> array = new ArrayList<Data>();
        Data x = new Data("Fred",21);
        array.add(x);
        Data y = new Data("Jo",43);
        array.add(y);
        Data z = new Data("Zoe",37);
        array.add(z);
        Lab5.PrintCollection(array);
    }

}

【问题讨论】:

  • 您的字符串name 被声明为静态public static String name;。类的所有实例共享相同的静态变量。删除static
  • 并且您应该遵循 Java 命名约定:方法名称以驼峰命名,即它们以小写开头。

标签: java arraylist


【解决方案1】:

那是因为name不是实例变量,它属于类定义,每次访问都是引用相同的对象引用;而age 是一个实例变量,这意味着,对于该类的每个实例,都会有一个不同对象的不同副本/引用(这是您的GetAge() [错误命名。 . 使用 camelCaseForMethodNames] 调用)。

查看实例变量是如何传播的here

当从同一个类蓝图创建多个对象时,它们每个都有自己不同的实例变量副本。

【讨论】:

  • 恕我直言,这段代码大部分是从我老师的代码中复制的 xD 我不知道为什么它里面有静态,为什么没有camelCasing
【解决方案2】:

只需删除此行中的关键字static

public static String name;

另外最好也设为private,以保持封装性。

【讨论】:

    猜你喜欢
    • 2015-12-02
    • 1970-01-01
    • 2012-05-28
    • 1970-01-01
    • 2014-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多