对于类型y,方法x未被识别

时间:2017-10-31 08:28:13

标签: java methods getter-setter

所以我试图从名为Lexicon的类中的单词列表中获取一个随机单词。

public abstract class Lexicon {

public String getWord(int index) {
    switch (index) {
        case 0: return "UNIVERSITY";
        case 1: return "COMPUTER";
        case 2: return "LAPTOP";
        case 3: return "HEADPHONES";
        case 4: return "FUZZY";
        case 5: return "HOTEL";
        case 6: return "KEYHOLE";
        case 7: return "TELEPHONE";
        case 8: return "PRINTER";
        case 9: return "BUILDING";
        default: return "Illegal index";
        }

    }; 

}

到一个名为Game的课程:

import java.util.Random;

public class Game {
    private int MaxGuess;
    private boolean GameOver;
    private String RandomWord;

    public Game(int maxGuess, boolean gameOver, Lexicon randomWord) {
        super();
        MaxGuess = maxGuess;
        GameOver = gameOver;

        Random rand = new Random();

        int  n = rand.nextInt(9);
        RandomWord=getWord(n);


    }

    public void Result(boolean GameOver) {
        if(GameOver) {
            System.out.println("You have won the game!!");
        }
        else {
            System.out.println("You Lost!!");
        }
    }



}

我收到一条错误消息,说明方法getWord(int)在游戏类型中未被识别。 它必须是非常简单的东西,但我不能让自己找到错误。尝试了一个小时。我的Java技能在整个夏天都生锈了。任何帮助将不胜感激。谢谢你。

5 个答案:

答案 0 :(得分:0)

因为getWord()是在班级Lexicon中定义的,而不是在班级Game中定义的。

答案 1 :(得分:0)

如果您希望继承函数,则需要game扩展Lexicon

public class Game extends Lexicon {
    ...
}

或者使用您拥有的词典:

RandomWord=randomWord.getWord(n);

答案 2 :(得分:0)

函数getWord属于不同的类。您可以将方法复制到游戏类中,也可以尝试调用Lexicon.getWord()而不是

答案 3 :(得分:0)

嗯,你应该RandomWord = randomWord.getWord(n),而不仅仅是RandomWord=getWord(n)

在任何情况下,我都不清楚为什么你这样做。词典可以只是一个字符串列表,而不是隐藏在类中的switch语句(以及一个抽象语句!)

答案 4 :(得分:0)

需要解决两个问题,

  1. nextInt函数永远不会得到0-9,但是0-8,请更改此行

    int  n = rand.nextInt(9);
    

    int n = rand.nextInt(10);
    
  2. getWord()未在Game Class中定义。你应该从Lexicon Class打电话。我建议你把它改成静态的。这是从

    改变而来的
    public String getWord(int index) {
    

    public static String getWord(int index) {
    

    所以你可以用

    直接调用这个函数
    RandomWord = Lexicon.getWord(n);
    

    通过这种方式,您节省了性能,并且还有正确的方法来实现函数,因为静态逻辑应始终以这种方式实现。

  3. *备注:与编译或错误无关,但对于变量命名:

    private int MaxGuess;
    private boolean GameOver;
    private String RandomWord;
    

    除非你总是以smallCamelToe惯例后的小写字母开头,否则一些例子如下:

    //variable
    private int maxGuess;
    private boolean gameOver;
    private String randomWord;
    
    //constant variable
    private final int MAX_GUESS = 1;
    
    //static constant variable, usually be used when implementing constant files and import from other classes
    public static final boolean GAME_OVER;
    

    可以实现以下内容:

    public Game(int maxGuess, boolean gameOver) {
        super();
        maxGuess = maxGuess; //you can use this.maxGuess if compile failed
        gameOver = gameOver; //you can use this.gameOver if compile failed
    
        Random rand = new Random();
        RandomWord = Lexicon.getWord(rand.nextInt(9));
    }