保存随机数组以在整个应用中使用

时间:2016-12-25 23:31:00

标签: java arrays

我是java的新手。 我有一个使用此代码生成随机数组的类。

public class game {
    private int max = 32;
    private int min = 1;
    private Random r = new Random();
    private Integer[] words_Image = new Integer[10];
    public void setwords_Image(Integer[] words_Image) {
        this.words_Image = words_Image;
        for (int i = 0; i < words_Image.length; i++) {
            int num = r.nextInt(max - min + 1) + min;
            int j = 0;
            while (j < i) {
                if (words_Image[j] == num) {
                    num = r.nextInt(max - min + 1) + min;
                    j = -1;
                }
                j += 1;
            }
            words_Image[i] = num;

        }

    }

    public Integer[] getWords_Image() {
        setwords_Image(words_Image);
        return words_Image;
    }
}

我想让数组只做一次,然后在整个应用程序中使用数组,而数组保持不变。 我不知道该怎么做,因为当我从该类创建一个对象时,这个数组每次都会改变。 任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:1)

&#34;因为当我从该类创建一个对象时,这个数组每次都会改变#34; - 您需要了解java中的static关键字。

静态变量:在Java中,可以使用static关键字声明变量。下面给出一个例子。

static int y = 0;

当使用关键字static声明变量时,它被称为类变量。所有实例共享变量的同一副本。可以使用类直接访问类变量,而无需创建实例。

没有static关键字,它被称为实例变量,并且该类的每个实例都有自己的变量副本。

  • 它是属于类的变量而不是对象(实例)

  • 静态变量仅在执行开始时初始化一次。在初始化任何实例变量之前,将首先初始化这些变量。

  • 要由该类的所有实例共享的单个副本。

  • 静态变量可以直接通过类名访问,不需要任何对象

语法:<class-name>.<variable-name>

阅读Static Methods, Variables, Static Block and Class with Example上的文章,了解更多详情。

  

编辑:我希望你自己探索和解决它,但既然你正在努力,我正在添加一个解决方案。请注意,您可以通过多种方式实现您的目标。

class Game {

    private static final int max = 32;
    private static final int min = 1;
    private static final Integer[] words_Image = new Integer[10];

    static {
        setwords_Image();
    }

    private static void setwords_Image() {
        Random r = new Random();
        for (int i = 0; i < words_Image.length; i++) {
            int num = r.nextInt(max - min + 1) + min;
            int j = 0;
            while (j < i) {
                if (words_Image[j] == num) {
                    num = r.nextInt(max - min + 1) + min;
                    j = -1;
                }
                j += 1;
            }
            words_Image[i] = num;
        }
    }

    public Integer[] getWords_Image() {
        return words_Image;
    }
}

public class test {

    public static void main(String[] args) {
        Game g1 = new Game();
        System.out.println(Arrays.toString(g1.getWords_Image()));
        Game g2 = new Game();
        System.out.println(Arrays.toString(g2.getWords_Image()));
    }
}

输出:(如你所料)

[1, 32, 18, 20, 27, 8, 9, 31, 3, 19]
[1, 32, 18, 20, 27, 8, 9, 31, 3, 19]

答案 1 :(得分:0)

你真正需要的是一个单身人士。这是编程中众所周知的概念,从Gamma等人的描述中最为熟知: Design Patterns ,俗称“Gang of Four”一书。你应该看一下What is an efficient way to implement a singleton pattern in Java?中的讨论。两个顶级答案都提倡enum用于在Java中实现单例,而答案中也提到了其他选项。在您的情况下,enum可能如下所示:

public enum Game {
    INSTANCE;

    private int max = 32;
    private int min = 1;
    private int size = 10;
    private final int[] wordsImage;

    private Game() {
        wordsImage = new int[size];
        Random r = new Random();
        for (int i = 0; i < wordsImage.length; i++) {
            int num = r.nextInt(max - min + 1) + min;
            int j = 0;
            while (j < i) {
                if (wordsImage[j] == num) {
                    num = r.nextInt(max - min + 1) + min;
                    j = -1;
                }
                j += 1;
            }
            wordsImage[i] = num;
        }
    }

    public int[] getWordsImage() {
        return wordsImage;
    }
}

需要访问随机数组的类例如:

    System.out.println(Arrays.toString(Game.INSTANCE.getWordsImage()));

如果您想阻止使用该数组的代码在其中放入其他数字,请仅向调用者返回一个副本:

    return Arrays.copyOf(wordsImage, size);