Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java if语句的奇怪行为_Java_Arrays_If Statement - Fatal编程技术网

Java if语句的奇怪行为

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

我试着做一个简单的一维“飞船游戏”。我被困在随机生成的船上。我有一个包含10个单元格的数组。第一艘飞船将占用3个单元,第二艘2个,第三艘1个。因此,我使用构造函数d=dlugosc(它们的长度)将ship作为一个对象。现在我正在编写一个方法,将它们随机放置在我的数组中。以下是我的全部简短代码:

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非常感谢!是的,这似乎是我的问题。我不知道“静态”的含义。现在我知道了,我会想办法的。谢谢:)非常感谢!是的,这似乎是我的问题。我不知道“静态”的含义。现在我知道了,我会想办法的。谢谢:)