Java if语句的奇怪行为
我试着做一个简单的一维“飞船游戏”。我被困在随机生成的船上。我有一个包含10个单元格的数组。第一艘飞船将占用3个单元,第二艘2个,第三艘1个。因此,我使用构造函数d=dlugosc(它们的长度)将ship作为一个对象。现在我正在编写一个方法,将它们随机放置在我的数组中。以下是我的全部简短代码:Java if语句的奇怪行为,java,arrays,if-statement,Java,Arrays,If Statement,我试着做一个简单的一维“飞船游戏”。我被困在随机生成的船上。我有一个包含10个单元格的数组。第一艘飞船将占用3个单元,第二艘2个,第三艘1个。因此,我使用构造函数d=dlugosc(它们的长度)将ship作为一个对象。现在我正在编写一个方法,将它们随机放置在我的数组中。以下是我的全部简短代码: package statki1; import java.util.Arrays; import java.util.Random; import java.util.Scanner; public
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]
if (array[0] == 2 & dlugosc == 3) {
array[s+1] = 2;
array[s+2] = 2;
array[s+3] = 1;
}
[2, 0, 0, 0, 0, 0, 0, 0, 0, 0]
但总的来说,我会做这样的事情
xxx.losowanie3;
xx.losowanie3;
x.losowanie3
所以我需要给我的方法添加一个条件,它应该是这样的:
[2, 2, 2, 1, 0, 0, 0, 0, 0, 0]
if (array[0] == 2 & dlugosc == 3) {
array[s+1] = 2;
array[s+2] = 2;
array[s+3] = 1;
}
[2, 0, 0, 0, 0, 0, 0, 0, 0, 0]
但它不起作用。现在,如果数组[0]==2,则我的数组如下所示:
[2, 2, 2, 1, 0, 0, 0, 0, 0, 0]
if (array[0] == 2 & dlugosc == 3) {
array[s+1] = 2;
array[s+2] = 2;
array[s+3] = 1;
}
[2, 0, 0, 0, 0, 0, 0, 0, 0, 0]
应该是这样的:[2,2,2,1,0,0,0,0,0]
有人能帮我解决这个问题吗?
这是因为你的s值可以是0-10之间的任何值 由于s可以是数组大小中的任意数字,因此只有当s==0时,代码才会按照您希望的方式运行
也许你应该重新考虑选择s而不是使用随机类来生成s的值,因为你的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]
也许您应该修改程序,使每个对象都有自己的变量副本。添加该语句时,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]
也许你应该修改程序,使每个对象都有它自己的变量副本。你应该检查
array[s]
的值,而不是array[s]
。数组[s+1]会有问题,因为s
是一个有效的索引,但是s+1
,s+2
,s+3
可能不会。我会看一看数组[s]=2;我们不知道s会是什么样子。很可能它正在覆盖相同单元格的值,并且if语句可能没有运行。您应该在array[s]
处检查值,而不是array[s]
。array[s+1]
将出现问题,因为s
是一个有效的索引,但是s+1
,s+2
,s+3
可能不会。我会看一看数组[s]=2;我们不知道s会是什么样子。很有可能它正在覆盖相同单元格的值,并且可能if语句甚至没有运行。或者对“随机性”施加更严格的约束,使其与逻辑相匹配。如@DejaVuSansMono所说。限制s,看起来您的代码最多只能有4个ships(这里可能是错误的),所以将s限制在0-6之间,或者对“随机性”施加更严格的限制,使其符合逻辑。如@DejaVuSansMono所说。限制s,看起来你的代码最多只有4条船(这里可能是错误的),所以限制s为0-6非常感谢!是的,这似乎是我的问题。我不知道“静态”的含义。现在我知道了,我会想办法的。谢谢:)非常感谢!是的,这似乎是我的问题。我不知道“静态”的含义。现在我知道了,我会想办法的。谢谢:)