无法进行非静态引用

时间:2014-04-02 21:56:51

标签: java arrays string methods int

用户输入一个猜测,最初是一个字符串,现在我正在尝试将该字符串转换为整数数组,错误是说我无法创建非静态引用。我不想让'userGuess'变量为静态,所以还有其他选项吗?

玩家等级

import java.util.Scanner;
public class Player 
{
    public int fastestWin, gamesCompleted=1;
    public String name, setName;
    public String userGuess;

    Scanner keyboard = new Scanner(System.in);

    public String getName()
    {
        System.out.print("Enter the player's name: ");
        return name = keyboard.nextLine();
    }

    public void setName()
    {
        getName();
        setName = name;
    }

    public String askForGuess()
    {
        System.out.print("Enter your guess: ");
        return  userGuess = keyboard.nextLine();
    }

    public void gamesCount()
    {
        gamesCompleted++;
    }
}

引擎类

import java.util.Random;
import java.util.Scanner;

public class Engine 
{
    public int numDigits, numDigitsSet;
    public int i;
    public int[] secretNumber, userGuessArray;
    public Random randomNumberGenerator;
    public String guessConvert = Player.userGuess;  //Made new variable 'guessConvert'                   
                                                    //getting error here for static reference
    Scanner sc = new Scanner(System.in);

    public void setNumDigits()
    {
        numDigitsSet = numDigits;
    }

    public int getNumDigits()
    {
        System.out.print("Enter the number of digits to use: ");
        return numDigits = sc.nextInt();
    }

    public void generateNewSecret()
    {
        Random rand = new Random();{
            for (int i=0; i<numDigitsSet; i++)
            {
                secretNumber[i]= rand.nextInt(10);
                System.out.println("" + secretNumber[i]);

            }
        }
    }

    public int[] getSecretNumber()
    {
        for (int j=0; j<secretNumber.length; j++)
        {
            System.out.println("" + secretNumber[j]);
        }
        return secretNumber;
    }


    public void convertNumtoDigitArray(String guessConvert)  //Trying to convert guessConvert into an array
    {

        String[] userGuessSplit = guessConvert.split(",");
        int[] userGuessArray = new int[userGuessSplit.length];
        for (int j=0; j<userGuessSplit.length; j++)
        {
            userGuessArray[j] = Integer.parseInt(userGuessSplit[j]);
        }
    }
}

4 个答案:

答案 0 :(得分:1)

只需创建另一个成员变量,就像其他成员一样

public String guessConvert;

并在构造函数中设置该变量。

public Engine(Player player) {

    guessConvert = player.userGuess;

}

或在Setter方法中:

public void SetGuessConvert(Player player)
{
    guessConvert = player.userGuess;
}

如果您需要在代码中的其他位置引用该Player对象作为成员变量,您可能希望保留对该{{1}}对象的引用。

答案 1 :(得分:0)

Engine对象应该具有对Player对象的引用 并且应该在它指向的Player对象上调用getUserGuess()。

答案 2 :(得分:0)

您似乎有一个班级Player,其中有一个字段userGuess,您说您不想制作静态字段。如果您不想将其设置为静态,则表示userGuess是属于每个Player对象的字段;因此,要访问该字段,您必须拥有Player 对象才能访问该字段。 Player.userGuess无效。它必须是p.userGuess,其中p是某个Player对象。

但是,如果不知道您想要创建Player个对象的位置,以及Engine将如何找出该对象是什么,我无法继续提供帮助。

答案 3 :(得分:0)

您可以完全删除userGuess String;它似乎没必要。 然后,您将创建一个Player对象并执行guessConvert = pObject.askForGuess();