[英]strange behaviour with if statement
我正在尝试做一个简单的一维“船舶游戏”。 我被困在随机产生的船只上。 我有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;
}
但这是行不通的。 现在,如果array [0] == 2,我的数组如下所示:
[2, 0, 0, 0, 0, 0, 0, 0, 0, 0]
并且应该是这样的: [2, 2, 2, 1, 0, 0, 0, 0, 0, 0]
谁能帮我解决这个问题? 问候
这是因为您的s值可以是0到10之间的任何值。
因为s可以是数组大小的任何数字,所以只有当s == 0时,您的代码才会按照您希望的方式运行。
也许您应该重新考虑选择s而不是使用随机类来生成s的值
添加语句时,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]
也许您应该修改程序,以便每个对象都有该变量的自己的副本。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.