2016-11-21 137 views
1

嘗試生成隨機大小(3到20之間)的隨機字符串時遇到小問題。我有一個數組arr,所有字符從(小寫)到Z(大寫)。然後我爲第二個數組arr2產生一個隨機長度arrLength,它將包含一些隨機選擇的字符。生成隨機字符串,缺少一個字母

我的問題是,字母'a'(小寫)永遠不會出現在我的隨機生成的字符串中。我認爲這個錯誤可能在for循環中,但我目前看不到它。可能它與(int) cast或Math.floor四捨五入有關係?

char[] arr = "abcdefghijklmnopqrstuwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray(); 
    int arrLength = (int) (Math.floor((Math.random() * ((17 - 3) + 1)) + 3)); 
    char[] arr2 = new char[arrLength]; 
    String str = ""; 

    for(int i=0;i<arrLength;i++) { 
     char num = arr[(int) (Math.floor(Math.random() * (50) + 1))]; 
     arr2[i] = num; 
    } 
+0

我懷疑這是您在Math.floor中的+1 – DejaVuSansMono

回答

5

取而代之的是魔術不斷50使用arr.length(注意,是在陣列中超過50個字符),並離開了+1,因爲它使最低的數字,你可以得到1和數組的索引在0開始Java的。

+1

謝謝,工作!問題是我正在翻譯這個來自Octave的代碼,而數組索引從1開始,我完全忘了。 –