我的类变量有问题,因为总是^^ 所以我正在构建一个名为Prng的类,其变量为
private int randListSize = 10;
private byte randList[] = new byte[randListSize];
private byte[] seed = new byte[]{ 34, -70, -4, 117, 98 };
相关的getters / setters 和方法
public void prng() {
SecureRandom random;
try {
random = SecureRandom.getInstance("SHA1PRNG");
random.setSeed(seed);
random.nextBytes(randList);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
}
在另一个名为Test.java的类中,我想: 1)将randListSize设置为/我想要的随机字节数 2)具有此大小的randList,而不是原始的10大小
每当我尝试时,我的randList总是大小为10.你能帮我吗? 在我班上测试我写过:
Prng prng = new Prng();
System.out.println(prng.getRandListSize() + " " + prng.getRandList().length);
prng.setRandListSize(11);
System.out.println(prng.getRandListSize()+ " " + prng.getRandList().length);
返回“10 10; 11 10”,最后我想要“11 11”。
编辑:这是我的getter / setters:public int getRandListSize() {
return randListSize;
}
public void setRandListSize(int randListSize) {
this.randListSize = randListSize;
}
public byte[] getSeed() {
return seed;
}
public void setSeed(byte[] seed) {
this.seed = seed;
}
public byte[] getRandList() {
return randList;
}
public void setRandList(byte[] randList) {
this.randList = randList;
}
答案 0 :(得分:2)
首先,在我看来,randListSize
是一个无用的字段,因为该属性可以直接从数组中检索,并且由于操作不昂贵,因此不需要缓存该值。因此,您实际上也不需要该字段的getter / setter。我看到你正在使用它作为初始大小变量,但在这种情况下,我认为它更好地成为构造函数/工厂方法的参数,因为它实际上不需要在其他任何地方使用
其次,setRandListSize()
实际上并没有改变randList
的大小,因为数组一旦创建,就无法进行结构修改(即创建数组后不能使数组更长/更短)。您只是更改了一个不相关的变量,这会在randListSize
停止匹配randList.length
后导致一些混淆。这就是您看到11 10
而不是11 11
的原因 - randListSize
仅在数组创建时使用,后来对randListSize
的更改不会影响数组。
为了得到你想要的结果,你将不得不分配一个全新的数组,并设置randList
指向它而不是旧的数组,你可以使用你的{{1 }} 方法。或者,您可以编写一个方法,可能称为setRandList()
,以便一次完成所有工作。
答案 1 :(得分:0)
您的setRandListSize
方法需要重新创建randList
数组。如果您需要将数据保存在其中,您的方法应该复制适合新数组的任何数据。
public void setRandListSize(int randListSize) {
this.randListSize = randListSize;
this.randList = new byte[randListSize];
}