当前位置: 首页 > 知识库问答 >
问题:

打印类型数据的ArrayList内容会产生错误的输出{Java}

南门焱
2023-03-14

我有一个数据类型的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);
    }

}

共有2个答案

东深
2023-03-14

只需删除这一行中的关键字静态

public static String name;

此外,最好也将它设为私有的,以保持封装。

昌砚
2023-03-14

这是因为name不是一个实例变量,它属于类定义,每次访问它,都引用相同的对象引用;而age是一个实例变量,这意味着,对于每个类的实例,将有一个不同的拷贝/引用/到一个不同的对象(这是由您的GetAGE()[坏命名...使用camelCaseForMETEDNames]调用)。

在这里查看实例变量是如何传播的:

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

 类似资料:
  • 对于一个类,我得到了一个由base64编码的salted sha-256散列密码组成的文件。 文件的格式为: 用户名:base64编码sha256密码:salt 我最初的想法是用base64对哈希进行解码,这样我就可以得到: 用户名:salted散列密码:salt 然后通过JTR或hashcat运行它来破解密码。 我的问题是在base64解码过程中。 我的代码看起来像: /*备选方案#1:为散列*

  • 我正在尝试制作一个程序,让很多人进入ArrayList,然后从中随机选择一个名字。代码运行正常,但请求名称输入的字符串在第一次运行时会显示两次。知道为什么会这样吗? 我希望它显示的内容:输入名称:。。。。。。 显示内容:输入名称:输入名称:。。。。。。

  • 每次我打印代码时,输出不会完全打印1.50,只有1.5。 我的代码是 然后 输出将只是:1.5而不是1.50。我想把它完整地打印出来。

  • 在这个程序中,我必须打印1到100之间的素数。要遵循的方法是——要找出素数,用存储在数组中的前一个素数除以一个数。如果给定的数字在除以任何前一个素数时留下0作为余数,那么它就不是素数。如果不是,它就是一个素数,并将其添加到数组中。在程序中——我初始化了一个由100个数字组成的数组,并将1到100个数字存储在数组a中(步骤1)。是我将存储素数的数组。我在(步骤2)中存储了的前两个值。在(步骤3)中,

  • 问题内容: 打印DIV内容的最佳方法是什么? 问题答案: 与早期版本相比有轻微变化-已在CHROME上测试

  • 问题内容: 打印DIV内容的最佳方法是什么? 问题答案: 与早期版本相比有轻微变化-已在CHROME上测试