Java更改另一个类中的变量及其依赖值

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

和往常一样,我的类变量有问题^^ 所以我正在构造一个名为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 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程序员已经习惯了它。第二种形式清楚地表明,您定义的变量类型是
字节[]
,即字节数组。我建议使用这种语法。