2014-06-09 45 views
-1

我有我的类变量的问题,一如既往^^ 所以我构建了一个名为PRNG类,使用变量Java的更改从另一个类变量和因值

private int randListSize = 10; 
private byte randList[] = new byte[randListSize]; 
private byte[] seed = new byte[]{ 34, -70, -4, 117, 98 }; 

的getter/setter方法在名为Test.java另一个类相关联 和方法

public void prng() { 
     SecureRandom random; 
     try { 
      random = SecureRandom.getInstance("SHA1PRNG"); 
      random.setSeed(seed); 
      random.nextBytes(randList); 
     } catch (NoSuchAlgorithmException e) { 
      e.printStackTrace(); 
     } 
    } 

,我想: 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/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; 
} 
+1

你可以显示'setRandListSize()'和'getRandList()'吗? – awksp

+0

'public int getRandListSize(){ \t \t return randListSize; \t} public void setRandListSize(int randListSize){ \t \t this.randListSize = randListSize; \t} ' 我使用了自动的日食方式来做到这一点^^ 我想我的种子会有同样的问题,因为它会从一个“密码”中加载。txt“文件(转成字节) – lrosique

+0

你可以用那个信息更新你的问题吗?正确格式化的代码可以得到很好的回应。 – awksp

回答

2

首先,randListSize,在我看来,是一个无用的领域,因为该属性可以直接从阵列中检索,并作为操作不贵的价值并不需要被缓存。因此,你真的不需要该领域的getter/setter。我看到你正在使用它作为初始大小变量,但在这种情况下,我认为它应该是一个构造函数/工厂方法的参数,因为它确实不需要在别处使用。

其次,setRandListSize()实际上并没有改变randList的大小,因为数组一旦创建后就不能在结构上进行修改(即在创建数组后它们不能更长/更短)。你只是改变一个不相关的变量,一旦randListSize停止匹配randList.length会导致一些混淆。这就是您看到的原因11 10而不是11 11 - randListSize仅在阵列创建时使用,后来更改为randListSize不影响阵列。

为了得到你想要的结果,你将不得不分配一个全新的数组,并设置randList指向它而不是你的旧的,你可以使用setRandList()方法来做到这一点。或者,你可以写一个方法,可能叫做createNewRandList(int newLength),一次完成所有的工作。

0

setRandListSize方法将需要重新创建randList阵列。如果你需要保存数据,你的方法应该复制适合新数组的任何数据。

public void setRandListSize(int randListSize) { 
    this.randListSize = randListSize; 
    this.randList = new byte[randListSize]; 
} 
+0

好的,谢谢你的回应!private byte randList []'和'private byte [] randList'有什么区别?我必须改变第一个到第二个(否则它不适用于你的函数)将种子编辑为^^ – lrosique

+0

对不起,这是一个错字。请参阅新版本。 –

+1

@ user3719373除了第一个被认为是有点区别之外,private byte randList []和private byte [] randList没有区别已经过时了,我认为这是因为C语言程序员已经习惯了,第二种形式表明你正在定义一个类型为byte []的变量,也就是一个字节数组。我们该语法。 – ajb

相关问题