2014-06-09 42 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

相關問題