繁体   English   中英

if语句的异常行为

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM