首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >if语句的奇怪行为

问if语句的奇怪行为
EN

Stack Overflow用户
提问于 2014-11-11 15:06:26
回答 2查看 106关注 0票数 0

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

代码语言:javascript
复制
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));

    }
}

现在它工作得很好,我的数组看起来如下:

代码语言:javascript
复制
[2, 2, 2, 1, 0, 0, 0, 0, 0, 0]

但总的来说我会做这样的事

代码语言:javascript
复制
xxx.losowanie3;
xx.losowanie3;
x.losowanie3

因此,我需要向我的方法添加一个条件,所以它应该如下所示:

代码语言:javascript
复制
if (array[0] == 2 & dlugosc == 3) {
        array[s+1] = 2;
        array[s+2] = 2;
        array[s+3] = 1;
    }

但不起作用。现在,如果数组== 2,我的数组如下所示:

代码语言:javascript
复制
[2, 0, 0, 0, 0, 0, 0, 0, 0, 0]

应该是这样的:[2, 2, 2, 1, 0, 0, 0, 0, 0, 0]

有人能帮我解决这个问题吗?问候

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-11 17:24:58

在添加语句时,if语句永远不会实际执行:

代码语言:javascript
复制
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);

这将打印出输出:

代码语言:javascript
复制
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“标记为静态变量。这意味着类中只有一个变量的副本。

问题似乎在代码块中:

代码语言:javascript
复制
//ships as objects
static Statki1 xxx = new Statki1(3);
static Statki1 xx = new Statki1(2);
static Statki1 x = new Statki1(1);

这个代码块中的最后一行将1的值分配给变量"dlugosc“,并且由于只有一个变量的副本,if语句将无法执行。当我将第二行和第三行注释为:

代码语言:javascript
复制
//ships as objects
static Statki1 xxx = new Statki1(3);
// static Statki1 xx = new Statki1(2);
// static Statki1 x = new Statki1(1); 

然后多次运行程序,直到变量"s“等于0为止。这将打印所需的输出:

代码语言:javascript
复制
The value of dlugosc is 3
[2, 2, 2, 1, 0, 0, 0, 0, 0, 0]

也许您应该修改程序,以便每个对象都有它自己的变量副本。

票数 0
EN

Stack Overflow用户

发布于 2014-11-11 15:16:33

这是因为你的s值可以是0到10的任何值。

因为s可以是数组大小中的任意数字,所以只有当s == 0时,代码才会按照您希望的方式运行。

也许您应该重新考虑选择s而不是使用随机类来生成s的值。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26867929

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档