2014-01-20 91 views
1

嗨,我真的是新來的Java,我只是想找出爲什麼我的程序不編譯。每當我編譯程序,我收到一條錯誤消息:非常簡單的隨機數生成器編譯問題

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
    The method nextInt(int) is undefined for the type Random 

    at Random.main(Random.java:11) 

對我的問題的任何輸入將不勝感激。

import java.util.Random; 

class Random { 
    public static void main(String[] args) 
    { 
     Random dice = new Random(); 
     int number=0; 

     for(int counter=1; counter<=10; counter++) 
     { 
      number = dice.nextInt(6); 
      System.out.println(number); 
     } 
    } 

} 
+0

如果有人想添加更好的解釋[這裏](http://docs.oracle.com/javase/specs/jls/se7/html/jls-6.html#jls-6.4.1)是鏈接到Java有關陰影的規範(查看本段中有關陰影類型的最後一個代碼示例)。 – Pshemo

+0

@ user3183586如果您發現有一個有幫助,請不要忘記[接受答案](http://meta.stackexchange.com/a/65088/155831) – Reimeus

回答

17

你都躲在Random類,你是從java.util.Random進口,通過命名您的Random類。把它叫做別的。

class RandomTest { 
    ... 
} 

注:不要忘了用適當的名稱(RandomTest.java在上面的例子),也重命名文件名。

+0

好吧,這很有道理感謝 – user3183586

7

您有一個名爲Random的類,但您也嘗試使用也稱爲Random的API類。當您致電dice.nextInt(6)時,Java正在調用您的類上的nextInt函數,而不是API方法。要修復,更改您的代碼如下所示:

import java.util.Random; 

class AnythingButRandom { 
    public static void main(String[] args) 
    { 
     Random dice = new Random(); 
     int number=0; 

     for(int counter=1; counter<=10; counter++) 
     { 
      number = dice.nextInt(6); 
      System.out.println(number); 
     } 
    } 

} 

(然後重命名Random.javaAnythingButRandom.java

7

你躲在你的導入,您可以重命名你的類;或者你可以當你創建一個隨機骰子對象使用完整的包名

java.util.Random dice = new java.util.Random(); // <-- like so 
+0

+1不再複製其他答案 – csmckelvey

2

,它沒有建立java.util.Random對象,它創建自己的類,隨機的對象。 nextInt方法正在您的類的對象上調用,並且由於它不存在,您會收到錯誤消息。爲您的班級命名爲ANYTHING,但隨機或任何其他進口。不要忘了重命名你的文件,以相同的新名稱。

+0

我只是好奇,你怎麼添加了其他答案尚未提供的新東西? – csmckelvey

+0

不是特別的,但我已經開始打字,然後發佈其餘的答案...... –

+0

嗯,這是正確的。 – csmckelvey

0

當你初始化一個隨機對象與

Random dice = new Random(); 

它實際上是從java.util.Random中創建您的隨機類的對象不是。

如果你真的想你的類被稱爲隨機然後用

java.util.Random dice = new java.util.Random(); 

但是,這只是普通的難看。我建議你爲你的班級找一個不同的名字。