如何在 Java 策划游戏中解决 "Cannot Make Static Reference to Non-Static Method"?

How to solve "Cannot Make Static Reference to Non-Static Method" in a Java mastermind game?

这个问题是基于我之前的问题。 我在我的程序中添加了作弊功能,但由于"Cannot Make Static Reference to Non-Static Method"(旧代码有效,您可以通过link我post查看),它无法编译。这是我的新代码:

import java.util.*;

public class mm {
  static int[] random;
  public static void main(String[] args) {
    System.out.println("I'm thinking of a 4 digit code.");

    //update
    mm m1 = new mm();
    random = m1.numberGenerator();

    int exact=0, close=0;
    while(exact!=4){
      int[] guess= m1.userinput(); //update
      exact=0;
      close=0;
      for(int i=0;i<guess.length;i++){
        if(guess[i]==random[i]){
        exact++;
        }
        else if (random[i]==guess[0] || random[i]==guess[1] || random[i]==guess[2] || random[i]==guess[3]) {
                    close++;
        }
      }
      if(exact==4){
        System.out.println("YOU GOT IT!");
      }
      else{
        System.out.println("Exact: "+exact+" Close: "+close);
      }
    }   
  }

  public int[] userinput() {
    System.out.print("Your guess: ");
    Scanner user = new Scanner(System.in);
    String input = user.nextLine();
    //cheater
    if (input.equals("*")) {
      System.out.format("Cheater!Secret code is:");
      for(int i=0;i<random.length;i++){
        System.out.print(random[i]);
      }
    }
    int[] guess = new int[4];
    for (int i = 0; i < 4; i++) {
      guess[i] = Integer.parseInt(String.valueOf(input.charAt(i)));
    }
    return guess;
  }

  public int[] numberGenerator() {
    Random rnd = new Random();
    int[] randArray = {10,10,10,10};
    for(int i=0;i<randArray.length;i++){
      int temp = rnd.nextInt(9);
      while(temp == randArray[0] || temp == randArray[1] || temp == randArray[2] || temp == randArray[3]){
        temp=rnd.nextInt(9);
      }
      randArray[i]=temp;
    }
    return randArray;
  }
}

如何解决?

您不能直接从静态方法调用非静态方法。在 public static main(String [] args) 为此,您应该首先创建一个 class 的对象。

在主要方法中试试这个:

mm m1 = new mm();
random = m1.numberGenerator();

int [] guess = m1.userInput();

这应该有效

另一种选择是将 userinput 方法也设为静态