2010-04-22 109 views
2

這裏是我的import語句:我的隨機有什麼問題?

import java.util.*; 

這是主要的:

Random Rand = new Random() ; 

這是一個公共無效方法:

  int a = 0 ; 
      while (!done) 
     { 
      int a = Rand.nextInt(10) ; 
      if (debug) stuff ; 
      if (possibles[a]==1) done = true ; 
     } 

這裏的錯誤消息,我得到:

TicTacToe.java:85: cannot find symbol 
    symbol : method nextInt(int) 
    location: class Rand 
       a = Rand.nextInt(10) ; 
         ^

這裏怎麼了?看起來我已經完成了所有的事情。

+1

蘭德變量的顏色應給了你一個提示.. – Kasturi 2010-04-22 21:06:12

+2

@Kasturi:這對於有經驗的開發人員可能會有用,但對於新來的Java人來說,這並不是一個好的提示。 – 2010-04-22 21:11:47

+0

提示是什麼? – David 2010-04-22 21:17:50

回答

4

您在main方法定義Rand並試圖利用它在你的公共無效方法。它超出了範圍。

嘗試在相同方法限定Rand(和小寫利用這段時間)

是這樣的:

在主

隨機蘭特=新的隨機();

在你的方法:

 Random rand = new Random(); 
     int a = 0 ; 
     while (!done) { 
      int a = rand.nextInt(10) ; //<-- the one declared above 
      if (debug){ stuff ; } 
      if (possibles[a]==1){ done = true ; } 
     } 

BTW使用大括號即使是在始終 1行,如果是

4
location: class Rand 

你顯然有一個在同一個包或進口命名Rand。根據Sun Java Naming Conventions將變量名稱從Rand重命名爲rand並且它將會 工作 修復特定問題

+0

這是一個範圍問題,而不是陰影問題。 – erickson 2010-04-22 21:11:30

+0

@erickson:這確實是修復的其他許多問題之一:)一步一步地做。 – BalusC 2010-04-22 21:34:46

5

看來您已經在項目的某個地方定義了一個名爲Rand的類。不要將此用於變量名稱。我建議使用random與一個小r。

而且,這條線是非法的:

int a - 0 ; 

你或許應該刪除否則你定義a兩次。

+1

我搜索了源代碼和字符串「蘭德」(不區分大小寫)的文件,只有在我提到的代碼中有問題。 – David 2010-04-22 21:07:26

+1

沒想到你是對的,我想。我的計算機上有一個叫蘭德的不同班級。 – David 2010-04-22 21:09:53

+1

我敢打賭'int a - 0;'實際上是一個錯字/ c&p錯誤。這就是在蘭德錯誤之前產生了另一個編譯錯誤。 – BalusC 2010-04-22 21:10:36

3

聽起來像Randmain方法中的局部變量。

當「public void method」被調用時,它不在範圍內。因此,編譯器將標識符Rand解釋爲類名稱。巧合的是,你的類必須被命名爲Rand,所以編譯器尋找一個名爲nextInt()的靜態方法,並且失敗。

要修復它,您有幾個選項。使Random實例成爲您創建的「公共無效方法」中的局部變量(通過將其作爲參數從main方法或其他調用方,或通過在方法內實例化)傳遞。或者,您可以聲明一個私有靜態變量Rand。調用該方法時,該變量將在範圍內。

順便說一下,Java的慣例是變量以小寫字母開頭。類型(類,接口和枚舉)以大寫字母開頭。打破這個約定會讓你的代碼看起來對Java程序員來說真的很陌生。

1

編譯器告訴你錯誤在location: class Rand

它爲什麼認爲Rand是一類?你的代碼中是否有class Rand的定義?

如果您致電Random對象r而不是Rand,會發生什麼情況?

0

的錯誤信息表明Java正在尋找一個叫做nextInt方法上類稱爲Rand服用int

由於某種原因,Java認爲它必須查看該類而不是變量。你的程序中是否有一個名爲Rand的班級?

這種混亂的問題可以通過以下的命名約定,並用小寫字母開頭的變量名來避免:

Random rand = new Random(); 
int a = rand.nextInt(10); 
1

嘗試重命名變量蘭特其他名稱..