我试着做简单的,一维的“船游戏”。我被困在随机生成的飞船上。我有10个细胞的数组。第一艘船将使用3个单元格,第二个单元格和第三个单元格。因此,我用构造函数d= dlugosc (它们的长度)作为一个对象。现在,我正在编写一个方法,它将随机地将它们放在我的数组中。这是我的全部短代码:
package statki1;
import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;
public class Statki1 {
static int[] array = new int[10];
static int dlugosc;
static Random r = new Random();
//constructor for ships
public Statki1(int d) {
dlugosc = d;
}
//ships as objects
static Statki1 xxx = new Statki1(3);
static Statki1 xx = new Statki1(2);
static Statki1 x = new Statki1(1);
//method which will randomly place ships
public static void losowanie3() {
int s = r.nextInt(array.length);
array[s] = 2;
if (array[0] == 2) {
array[s+1] = 2;
array[s+2] = 2;
array[s+3] = 1;
}
System.out.println(s);
}
public static void main(String[] args) `enter code here`{
Scanner input = new Scanner(System.in);
int choose;
xxx.losowanie3();
System.out.println(Arrays.toString(array));
}
}现在它工作得很好,我的数组看起来如下:
[2, 2, 2, 1, 0, 0, 0, 0, 0, 0]但总的来说我会做这样的事
xxx.losowanie3;
xx.losowanie3;
x.losowanie3因此,我需要向我的方法添加一个条件,所以它应该如下所示:
if (array[0] == 2 & dlugosc == 3) {
array[s+1] = 2;
array[s+2] = 2;
array[s+3] = 1;
}但不起作用。现在,如果数组== 2,我的数组如下所示:
[2, 0, 0, 0, 0, 0, 0, 0, 0, 0]应该是这样的:[2, 2, 2, 1, 0, 0, 0, 0, 0, 0]
有人能帮我解决这个问题吗?问候
发布于 2014-11-11 17:24:58
在添加语句时,if语句永远不会实际执行:
if (array[0] == 2 & dlugosc == 3) {
array[s+1] = 2;
array[s+2] = 2;
array[s+3] = 1;
}
System.out.println("Value of dlugosc is " + xxx.dlugosc);这将打印出输出:
The value of dlugosc is 1
[2, 0, 0, 0, 0, 0, 0, 0, 0, 0]要执行if语句,变量"s“必须等于0,变量"dlugosc”必须等于3。即使分配给变量"s“的随机数为0(为了获得0必须多次运行程序),if语句也不会执行,因为变量"dlugosc”的值为1。
您将变量"dlugosc“标记为静态变量。这意味着类中只有一个变量的副本。
问题似乎在代码块中:
//ships as objects
static Statki1 xxx = new Statki1(3);
static Statki1 xx = new Statki1(2);
static Statki1 x = new Statki1(1);这个代码块中的最后一行将1的值分配给变量"dlugosc“,并且由于只有一个变量的副本,if语句将无法执行。当我将第二行和第三行注释为:
//ships as objects
static Statki1 xxx = new Statki1(3);
// static Statki1 xx = new Statki1(2);
// static Statki1 x = new Statki1(1); 然后多次运行程序,直到变量"s“等于0为止。这将打印所需的输出:
The value of dlugosc is 3
[2, 2, 2, 1, 0, 0, 0, 0, 0, 0]也许您应该修改程序,以便每个对象都有它自己的变量副本。
发布于 2014-11-11 15:16:33
这是因为你的s值可以是0到10的任何值。
因为s可以是数组大小中的任意数字,所以只有当s == 0时,代码才会按照您希望的方式运行。
也许您应该重新考虑选择s而不是使用随机类来生成s的值。
https://stackoverflow.com/questions/26867929
复制相似问题