Java更改另一个类中的变量及其依赖值
和往常一样,我的类变量有问题^^ 所以我正在构造一个名为Prng的类,带有变量Java更改另一个类中的变量及其依赖值,java,Java,和往常一样,我的类变量有问题^^ 所以我正在构造一个名为Prng的类,带有变量 private int randListSize = 10; private byte randList[] = new byte[randListSize]; private byte[] seed = new byte[]{ 34, -70, -4, 117, 98 }; 关联的getter/setter 方法呢 public void prng() { SecureRandom rand
private int randListSize = 10;
private byte randList[] = new byte[randListSize];
private byte[] seed = new byte[]{ 34, -70, -4, 117, 98 };
关联的getter/setter
方法呢
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) 有这个尺寸的随机列表,而不是原来的10号
每当我尝试时,我的排行榜总是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/setter:
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;
}
您的
setRandListSize
方法将需要重新创建randList
数组。如果您需要将数据保存在其中,那么您的方法应该复制任何可以放入新数组的数据
public void setRandListSize(int randListSize) {
this.randListSize = randListSize;
this.randList = new byte[randListSize];
}
首先,在我看来,
randListSize
是一个无用的字段,因为该属性可以直接从数组中检索,而且操作成本不高,因此不需要缓存该值。因此,该字段也不需要getter/setter。我看到您正在使用它作为初始大小变量,但在这种情况下,我认为最好将它作为构造函数/工厂方法的参数,因为它实际上不需要在其他任何地方使用
其次,setRandListSize()
实际上并不会改变randList
的大小,因为数组一旦创建,就无法在结构上进行修改(即,在创建数组后不能使其变长/变短)。您只是在更改一个不相关的变量,一旦randListSize
停止匹配randList.length
,就会导致一些混乱。这就是为什么您看到的是11 10
而不是11 11
-randListSize
仅在创建数组时使用,以后对randListSize
的更改不会影响数组
为了得到想要的结果,您必须分配一个全新的数组,并将
randList
设置为指向它,而不是使用setRandList()
方法来指向旧数组。或者,您可以编写一个方法,可能称为createNewRandList(int-newLength)
,一次完成所有工作。是否可以显示setRandListSize()
和getRandList()
?public int-getRandListSize(){return randListSize;}public void setRandListSize(int-randListSize){this.randListSize=randListSize;}
我使用了eclipse的自动方式来做^^我想我的种子也会有同样的问题,因为它将从“password.txt”文件(转换为字节)加载你能用这些信息更新你的问题吗?格式正确的代码对获得好的回答有很大帮助。编辑问题,不要把代码塞进难以辨认的注释中。啊,好的,谢谢你的回答!private byte randList[]
和private byte[]之间有什么区别randList
?我必须将第一个更改为第二个(否则它与您的函数不起作用)。我将编辑种子以^^^抱歉,这是一个输入错误。请参阅新版本。@user3719373私有字节randList[]
和私有字节[]之间没有区别randList
,除了第一个被认为有些过时之外,我认为它被放在语言中只是因为C程序员已经习惯了它。第二种形式清楚地表明,您定义的变量类型是字节[]
,即字节数组。我建议使用这种语法。