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