首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JAVA:不能从静态上下文引用非静态变量randomNums。

JAVA:不能从静态上下文引用非静态变量randomNums。
EN

Stack Overflow用户
提问于 2017-04-02 11:29:22
回答 2查看 1.1K关注 0票数 0
代码语言:javascript
复制
import java.util.Random;
public class Enemy extends Character{
Random randomNums = new Random();

public Enemy (Type enemyType){
    super(enemyType);
}

public int dropCoins(){
    return randomNums.nextInt((50-30)+1)+30;
}

public static int getNumGoblins(){
    return randomNums.nextInt((5-2)+1)+2;
}
public static int getNumSkeletons(){
    return randomNums.nextInt((7-3)+1)+3;
}

}

代码语言:javascript
复制
import java.util.Random;
public class Player extends Character{
// attributes for the plauer class
// initilizes the fields
private int coins;
private Potion[] inventory;
Random randomNums = new Random();

//methods

public Player(Type playerType){
    super(playerType);
    coins = 0;
    inventory = new Potion[5];
}   

public void increaseStrength(int strengthIncrease){

}
public int getCoins(){
    return coins;
}
public void increaseCoins(int coins){

}
public void decreaseCoins(int coins){

}
public void addToInventory(String a, Type potion){

}
public void removeFromInventory(int index){

}
public void displayInventory(){

}
/*public int getNumOpenSlots(){
    return numOpenSlots;
}*/

public void battleMinion(Enemy enemy){


    Enemy goblin = new Enemy(Character.Type.GOBLIN);

    if (enemy.getName() == "Goblin"){
        for (int i = 1; i <= goblin.getNumGoblins(); i++)
        {
          System.out.printf("***%s vs %s %d***\n", getName(), enemy.getName(), i);

public abstract class Character{

public enum Type{ ROGUE, PALADIN, JACKIE_CHEN, SKELETON, GOBLIN, WIZARD}

private String name;
private int hitPoints;
private int strength;
private Weapon weapon;
//other attributes

//methods

public Character(Type characterType){
    switch(characterType){
        case ROGUE:
            //set the attributes for a Rogue
            name = "Rogue";
            // TODO: set other attributes
            hitPoints = 55;
            strength = 8;
            Weapon rogue = new Weapon("Short Sword", 1, 4);

            break;
        case PALADIN:
            //set the attributes for a Rogue
            name = "Paladin";
            // TODO: set other attributes
            hitPoints = 35;
            strength = 14;
            Weapon paladin = new Weapon("Long Sword",3,7);
            break;
        case JACKIE_CHEN:
            name = "Jackie Chen";
            hitPoints =45;
            strength = 10;
            Weapon jackie = new Weapon("Jump Kick",2, 6);
            break;
        case SKELETON:
            name = "Skeleton";
            hitPoints = 25;
            strength = 3;
            Weapon skeleton = new Weapon("Short Sword" ,1, 4);
            break;
        case GOBLIN:
            name = "Goblin";
            hitPoints = 25;
            strength = 4;
            Weapon goblin = new Weapon("Axe",2,6);
            break;
        case WIZARD:
            name = "Wizard";
            hitPoints = 40;
            strength = 8;
            Weapon wizard = new Weapon("Fire Blast", 4, 10);
            break;
    }
}

public String getName(){
    return name;
}

public int getHitPoints(){
    return hitPoints;
}
public int getStrength(){
    return strength;
}
public void setStrength(int _strength){
    this.strength =_strength;
}
public void setWeapon(Weapon _weapon){
    this.weapon = _weapon;

}

public void attack(){

}

public void increaseHitPoints(){

}
public void decreaseHitPoints(){

}

获取错误信息

代码语言:javascript
复制
./Enemy.java:14: error: non-static variable randomNums cannot be referenced from a static context
        return randomNums.nextInt((5-2)+1)+2;
               ^
./Enemy.java:17: error: non-static variable randomNums cannot be referenced from a static context
        return randomNums.nextInt((7-3)+1)+3;
               ^

2个错误

不知道怎么弄明白..。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-04-02 11:35:22

您正在尝试在静态方法中引用非静态成员,这是不允许的.

代码语言:javascript
复制
public static int getNumGoblins(){
    return randomNums.nextInt((5-2)+1)+2;
}
public static int getNumSkeletons(){
    return randomNums.nextInt((7-3)+1)+3;
}

您需要将randomNums声明为静态

代码语言:javascript
复制
static Random randomNums = new Random();
票数 0
EN

Stack Overflow用户

发布于 2017-04-02 11:32:15

由于randomNums引用是对象作用域,所以不能在static方法中直接访问它,因此将其范围声明为静态,如下所示:

代码语言:javascript
复制
static Random randomNums = new Random();

或者无论如何,您正在使用getNumGoblins(Enemy的引用类型)调用goblin ()和getNumSkeletons()方法,因此只需从方法签名中删除static关键字,如下所示:

代码语言:javascript
复制
public int getNumGoblins(){
    return randomNums.nextInt((5-2)+1)+2;
}
public int getNumSkeletons(){
    return randomNums.nextInt((7-3)+1)+3;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43167791

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档