2011-11-06 38 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数组也不是一成不变的方法,你需要启动对象或使其静态

相关问题