我有一个数据类型的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);
}
}
只需删除这一行中的关键字静态
:
public static String name;
此外,最好也将它设为私有的,以保持封装。
这是因为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上测试