2014-02-05 38 views
0

我應該創建一個程序,調用一個方法來產生數字1到10的排列。基本上,我應該用1-10之間的隨機數填充數組從來沒有得到重複的數字,每次我調用該方法時都會得到不同的結果。我使用了Random()類,但由於某些原因它正在生成符號,字符和數字。這裏是我的程序:從Java中的隨機數發生器中獲取字符

import java.util.*; 

public class perms 
    { 
    public static void main(String[] args) 
    { 
    int[] myPermutation; 
    myPermutation = generatePermutation1To10(); 
    System.out.println(myPermutation); 
    } 

    private static int[] generatePermutation1To10() { 
     Random rng = new Random(); 
     int[] nums = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; 
     int[] finalNums = new int[nums.length]; 

     for (int k=0;k<finalNums.length; ++k) 
     { 
      int rnIdx = rng.nextInt(nums.length-k); 
      finalNums[k] = nums[rnIdx]; 
      nums[rnIdx] = nums[nums.length-k-1]; 
     } 
     return finalNums; 
    } 
} 

回答

2

這些字符不是隨機字符,而不是隨機整數。這是the toString() method in Object的默認輸出,該數組(也是對象)不會覆蓋。

[T]他的方法返回一個字符串等於值:

getClass().getName() + '@' + Integer.toHexString(hashCode()) 

你可能看到的是這樣的:

[[email protected] 

[I是Java對陣列碼([)的intI),而68111f9b是哈希公司的十六進制輸出de爲陣列。

嘗試

System.out.println(Arrays.toString(myPermutation)); 
+0

值得加入到這個答案是什麼你打印出是一個內存位置。這就是爲什麼它看起來像隨機數字和字符。 – Rainbolt

+0

工作!非常感謝!我不知道它是這樣做的。 – Corey

+0

@約翰它不是一個內存位置 – Cruncher

0

你的代碼是正確的,但你看到陣列的內部表示。使用Arrays.toString打印出你的陣列:

System.out.println(Arrays.toString(myPermutation));