2011-11-06 34 views
0
import java.util.*; 
import java.io.*; 

public class LootGenerator{ 

public static void main (String[] args) 
    throws FileNotFoundException{ 
     System.out.println("This program simulates the random item generator"); 
     System.out.println("from the game Diablo II. Happy hunting!"); 
     System.out.println(); 
     String file="monstats.txt"; 
     Monster[] array = getArray(file); 
     //Monster alex=getRandomMonster(array); 
     } 

public Monster getRandomMonster(Monster[] array){ 
    int randMonster = (int)(Math.random() * array.length); 
    return array[randMonster]; 
} 

public Monster[] getArray (String file) 
    throws FileNotFoundException{ 
Scanner sc = new Scanner (new File (file)); 
Monster[] array = new Monster[sc.nextInt()]; 
sc.next(); //takes away the word Class 
sc.next(); //takes away the word Type 
sc.next(); //takes away the word Level 
sc.next(); //takes away the word TreasureClass 
for(int a = 0; a < array.length; a++) 
{ 
    array[a] = new Monster(sc.next(), sc.next(), sc.nextInt(), sc.next()); 
} 
return array; 
} 

} 

    class Monster{ 
    private String monsterClass; 
private String type; 
    private int level; 
    private String treasureClass; 

public Monster(String myClass, String myType, int myLevel, String myTreasureClass){ 
    monsterClass = myClass; 
     type = myType; 
    level = myLevel; 
    treasureClass = myTreasureClass; 
} 

public String getMonsterClass(){ 
    return monsterClass; 
} 

public String getType(){ 
    return type; 
} 

public int getLevel(){ 
    return level; 
} 

public String getTreasureClass(){ 
    return treasureClass; 
} 

}不能從靜態函數中引用?

我想不出有什麼不對我的計劃......有什麼建議?我一直得到它不能從靜態上下文中引用 - 行Monster [] array = getArray(file)就是。該計劃的目的是隨機生成一個文本文件中的怪物 - 轉讓是在這裏,如果你需要看文本文件本身:http://www.cis.upenn.edu/~cis110/hw/hw06/index.html

+0

您不能引用從靜態方法實例方法,......是的getArray未聲明爲static –

回答

3

您試圖從靜態方法調用常規方法,這是不可能的。您可以實例化LootGenerator,然後調用該方法或使該方法成爲靜態方法(只需將靜態修改器添加到方法中)。

一個解決方案:

public static void main (String[] args) 
    throws FileNotFoundException { 
     System.out.println("This program simulates the random item generator"); 
     System.out.println("from the game Diablo II. Happy hunting!"); 
     System.out.println(); 
     String file = "monstats.txt"; 
     LootGenerator lg = new LootGenerator(); 
     Monster[] array = lg.getArray(file); 
     Monster alex = lg.getRandomMonster(array); 
} 

您可以找到有關實例和類成員here更多信息。

簡而言之,只能在類的實例上調用實例方法。靜態方法屬於類,可以從任何地方調用,但它們不能訪問實例變量或調用實例方法,除非它們實際上具有對類實例的引用。

1

getArray是實例方法,而你從main調用它聲明爲static。如果您將getArray更改爲靜態,則會進行編譯。

您還會遇到與getRandomMonster相同的問題。

1

你應該讓

public Monster[] getArray (String file) 
    throws FileNotFoundException 

靜態的,所以,你可以從裏面main()因爲你正在做的當前調用它,你不需要實例化類LootGenerator調用它(如果該方法是靜態的,它屬於到聲明它的類並且可以在不使用該類的任何實例的情況下被調用)。

1

您無法直接從靜態方法(main)中引用與特定對象相關的非靜態方法(getArray),該方法與特定對象無關。

要解決它,你可能只是你的方法更改爲靜態:

public static Monster[] getArray (String file) { 
    // ... 
} 
1

getArray()getRandomMonster()都是非靜態的 - 他們需要你的對象的實例被叫做。你的主要方法是靜態的,所以你沒有一個實例。你必須創建它:

LootGenerator generator = new LootGenerator(); 
generator.getArray(..); 
generator.getRandomMonster(..); 
1

main功能static,這意味着它可以在類被稱爲是一個整體,而不僅僅是該類的一個特定實例。 getArray沒有被定義爲靜態的,所以如果你打電話給它,你必須在LootGenerator的特定實例上調用它,但是你試圖在整個類中調用它。我在getArray中看不到任何非靜態代碼,因此您應該可以將其聲明爲靜態。

2

GET數組也不是一成不變的方法,你需要啓動對象或使其靜態

相關問題