【问题标题】:How to reference a 2D array from a static context?如何从静态上下文中引用二维数组?
【发布时间】:2013-12-16 21:52:15
【问题描述】:

每次我在generateBoard 方法中调用myGrid 时,都会收到错误消息:

非静态变量myGrid不能被静态上下文引用

据我了解,这不应该发生,因为我已将数组设置为公开的,并且应该能够从任何其他类访问。那我是不是设置错数组了?

import java.util.Random;

public class Zombies {
    private int Level = 1;
    private int MoveNo = 0;
    public int[][] myGrid = new int[12][12];

    public static void generateBoard() {
        Random rand = new Random();
        int i, j;
        for (i = 0; i < 12; i++) {
            for (j = 0; j < 12; j++) {
                if ( i == 6 && j == 6) {
                    myGrid[i][j] = 'P';
                }
                if (rand.nextInt(4) == 0) {
                    myGrid[i][j] = 'I';
                }
                myGrid[i][j] = 'x';
            }
        }
    }

    public static String printBoard() {
        int i, j;
        for (i = 0; i < 12; i++) {
            for (j = 0; j < 12; j++) {
                if (j == 0) {
                    System.out.print( "| " );
                }
                System.out.print( myGrid[i][j] + " " );
                if (j == 12) {
                    System.out.print( "|" );
                }
            }
        }
    }
}

【问题讨论】:

  • 以后,请高亮(用文字)错误信息指示的行。将更容易解决这个问题。

标签: java arrays static definition


【解决方案1】:

myGrid 变量是实例变量而不是类变量。也就是说,它只能被Zombies 的实例访问。另一方面,静态方法(和类,也称为静态变量)属于一个类,在这种情况下,在所有 Zombies 实例之间共享。

要么将myGrid (int[][]) 作为参数传递给每个静态方法,要么将其声明为static

【讨论】:

  • 如何将数组声明为静态数组?只是'public static int[][] myGrid = new int[12][12];' ?
  • 是的,正如你所写。但是,同时请记住,根据您的设计,可以将数组作为参数传递给这些方法,或者可以将 2D 数组声明为类变量(静态)。如果您希望实例化静态数组(即,您可能希望在静态方法开始处理它之前使用 10 填充值),无论出于何种原因,在声明期间,您都可以使用静态块。
  • 是的,它被用作游戏板,所以我认为最好让它静态访问。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-03
  • 1970-01-01
  • 1970-01-01
  • 2018-09-03
相关资源
最近更新 更多