【问题标题】:Cannot make a non-static reference无法进行非静态引用
【发布时间】:2014-05-14 11:18:54
【问题描述】:

用户输入一个猜测,它最初是一个字符串,现在我试图将该字符串转换为一个整数数组,错误是说我无法进行非静态引用。我不想将“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]);
        }
    }
}

【问题讨论】:

  • 请发帖Player类。
  • 数组guessConvert是否只包含逗号分隔的整数?
  • @ShreyosAdikari 是的先生!

标签: java arrays string methods int


【解决方案1】:

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

public String guessConvert;

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

public Engine(Player player) {

    guessConvert = player.userGuess;

}

或在 Setter 方法中:

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

如果您需要在代码的其他地方引用它,您可能希望将对该 Player 对象的引用作为成员变量。

【讨论】:

  • 我被告知不要在我的类中包含构造函数。这是唯一的方法吗?
  • 然后通过 Setter 方法传入 Player 对象,或者从您的 Engine 中构造一个 Player 对象。没有播放器就无法玩游戏。
  • 谢谢谢谢!这似乎奏效了。虽然现在我在不同的行上得到了一个空错误。我应该问一个新问题吗?
  • Stack Overflow 不是调试器。弄清楚为什么你引用的变量为空。提示:您可能尚未为其分配对象。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    您似乎有一个类Player,它有一个字段userGuess,您说您不想使其成为静态。如果您不想使其成为静态,那意味着userGuess 是属于每个Player 对象的字段;因此,要访问该字段,您必须有一个Player object 才能访问该字段。 Player.userGuess 将不起作用。它必须是p.userGuess,其中p 是一些Player 对象。

    但是,如果不知道您希望在哪里创建 Player 对象,以及 Engine 将如何找出该对象是什么,我就无能为力了。

    【讨论】:

    • 我添加了播放器类。例如,用户猜测“323”是一个字符串。这是来自玩家类。现在我需要将字符串转换为整数数组,3、2、3。
    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 2011-06-25
      • 2023-04-02
      • 2013-06-30
      • 2021-08-31
      • 1970-01-01
      相关资源
      最近更新 更多