2013-04-10 87 views
-1

我無法將隨機生成器實例從被識別爲對象中獲取,並且它不允許在另一個.class文件中使用。隨機整數發生器的基本代碼是這樣的:未識別新對象實例 - Java

package RandomInstanceGenerator; 
import java.util.Random; 

/** Generate 10 random integers in the range 0..99. */ 
public final class RandomInteger { 

    public static final void main(String... aArgs){ 
    log("Generating 10 random integers in range 0..99."); 

    //note a single Random object is reused here 
    Random randomGenerator = new Random(); 
    for (int idx = 1; idx <= 10; ++idx){ 
     int randomInt = randomGenerator.nextInt(100); 
     log("Generated : " + randomInt); 
    } 

    log("Done."); 
    } 

    private static void log(String aMessage){ 
    System.out.println(aMessage); 
    } 
} 

我想讓下面的代碼運行以上作爲新的實例。我嘗試了幾種從其他學習中看得很清楚的方法,但他們讓我失望了,所以我要求他人的知識幫助理解。我說,在理解我從字面上複製並粘貼來自另一個源代碼的基本代碼後,它會運行它自己的.class。下面是嘗試創建一個新的實例代碼:我肯定都需要編輯,希望我能解決這個問題了所以我的作品

package RandomInstanceGenerator; 
import java.util.Random; 
class Inst { 
    public static void main (String args[]) { 
    RandomInteger rig=new RandomInteger(); 
    rig.main(args); 
    } 
} 

名單的嘗試變化:

1)試圖導入RandomInteger.class。給出的錯誤說它找不到符號「隨機整數」。

我使用的代碼import RandomInstanceGenerator.RandomInteger;

2)的後面的下一次嘗試..

+2

如果您發現錯誤並需要我們的幫助,則需要打印完整和完整的錯誤文本。否則你迫使我們猜測。 – 2013-04-10 01:38:41

+0

請注意,您正試圖在實例上而不是在類上調用靜態方法。這可以做,但不是一個好習慣。更重要的是,我認爲你不想讓你的RandomInteger類有一個主要的方法或任何靜態方法,事實上我願意爲此付出金錢。 – 2013-04-10 01:39:50

+0

當我嘗試創建新實例時,它說它找不到符號「RandomInteger」。 – userLost 2013-04-10 01:40:11

回答

0

當Java的執行程序,它會尋找一個main功能;在這種情況下你的第二課。那個類然後實例化你的第一個類(通過new RandomInteger())。然後你試圖調用第一課的主要方法。

但請注意,該方法標記爲static。靜態方法只能在類上執行,而不能在特定的實例化對象上執行。如果你使用RandomInteger.main(),你可以期待一個不同的結果:

class Inst { 
    public static void main (String args[]) { 
    RandomInteger.main(args); 
    } 
} 

但是請注意,這僅相當於運行RandomInteger,因爲它是自己的程序。如果像你說的,你要運行程序作爲一個對象的方法,這是你想要什麼:

public final class RandomInteger { 
    private Random randomGenerator = new Random(); //A single object can reuse this component 

    //function prints out x random numbers between low and high 
    //Note that your function should do ONE thing, therefore do not make it also interpret 
    //your program arguments! 
    public void logXRandomNumbers(int x, int low, int high){ 
    log("Generating " + x + " random integers in range " + low ".." + high); 

    int range = high - low; 
    //you really should do a sanity check here to ensure the range is valid. 

    //note a single Random object is reused here 
    for (int idx = 1; idx <= x; ++idx){ 
     int nextResult = this.randomGenerator.nextInt(range) + low; 
     log("Generated : " + nextResult); 
    } 

    log("Done."); 
    } 

    //This function is probably overkill 
    private static void log(String aMessage){ 
    System.out.println(aMessage); 
    } 
} 

現在,所有你需要做的是從你的主函數中調用這個:

public static void main (String args[]) { 
    RandomInteger generator = new RandomInteger(); 
    generator.logXRandomNumbers(10, 0, 100); 
} 

至於你的導入,兩個類應該有相同的包。可以說,它的Generator爲了簡單:

package Generator; 

只有你的第二類(不太井命名的研究所)需要進口的發電機/日誌類:

import Generator.*; 

import Generator.RandomInteger; 

請確保這兩個文件都位於名爲'Generator'的同一目錄中,並且您正在上面的目錄中運行javac

+0

感謝您的幫助,我會試試這個。 – userLost 2013-04-10 11:58:21

+0

它的工作!我感謝你向一個不太理解的人解釋你的努力。謝謝。 :) – userLost 2013-04-10 12:14:07