为什么这些部分重叠

时间:2016-09-11 19:14:17

标签: java arrays loops

我正在制作这个计划,以制造一个充满战舰和战舰的战舰战场。我制作了一个代码,将最长的片段放在电路板上:

    public void fieldFiller5(){
    int horizontalOrVertical = random.nextInt(2);
    int starth = random.nextInt(6); // the int has to be below 5
    int startv = random.nextInt(6); 

    for (int j = 0; j<10; j++){
        for(int k = 0; k<10;k++){
            field[j][k]=false;
    }
        if (horizontalOrVertical==0){
            for(int i =0; i<5; i++){
            field[starth+i][startv]= true;  // makes a line of 5 true
            }   
        }
        else{
            for(int i =0; i<5; i++){
            field[starth][startv+i]= true;  // makes a line of 5 true
            }       
        }
    }
}

这完美,但现在我想把第二块放在场上,但我不希望它与第一块重叠,所以我做了一个检查机制,检查是否所有空格都是假的,如果它们不是&#39 ;它应该选择另一个数字并重新启动循环,但它并不总是运行得很好,这就是它的样子:

public void fieldFiller4(){

    for (int k=0; k<2; k++){

        int horizontalOrVertical = random.nextInt(2);
        int starth = random.nextInt(7); // the int has to be below 6
        int startv = random.nextInt(7); 

        if (horizontalOrVertical==0){
            for(int i=0; i<4; i++){
                if ((field[startv+i][starth]==true)){
                starth=random.nextInt(7);
                startv=random.nextInt(7);
                i=0;
                }


            }
            for(int i =0; i<4; i++){
            field[starth+i][startv]= true;  // makes a line of 4 true
            }
        }

        if (horizontalOrVertical==1){
            for(int i=0; i<4; i++){
                if ((field[startv][starth+i]==true)){
                starth=random.nextInt(7);
                startv=random.nextInt(7);
                    i=0;
                }


            }
            for(int i =0; i<4; i++){
                field[starth][startv+i]= true;  // makes a line of 4 true
            }
        }
    }
}

然后我制作了一个打印出来的打印方法:

public void fieldPrinter(){
        String row = new String("");
        for (int i = 0; i<10; i++){
            row = "";
            for(int k = 0; k<10;k++){
                if (field[i][k]==true){
                    row = row+ "X";
                }
                else{
                    row = row+"O";
                }

            }
            System.out.println(row);
        }
    }
}

大多数时候它看起来很好,有点像这样:

OOOOOOOOOO
OXXXXXOOOO
OOOOOOOOOO
OOXOOOOOOO
OOXOOOOOOO
OOXOOOOOOO
OOXOOOXOOO
OOOOOOXOOO
OOOOOOXOOO
OOOOOOXOOO

但有时它只会做第二次,一次看起来像这样:

OOOOOXOOOO
OOOOOXOOOO
OOXOOXOOOO
OOXOOXOOOO
OOXOOOOOOO
OOXOOOOOOO
OOXOOOOOOO
OOXOOOOOOO
OOOOOOOOOO
OOOOOOOOOO

有时它们会重叠,看起来像这样:

OOOOOOXOOO
OOXOOOXOOO
OOXOOOXOOO
OOXOOXXXXO
OOXOOOOOOO
OOXOOOOOOO
OOOOOOOOOO
OOOOOOOOOO
OOOOOOOOOO
OOOOOOOOOO

我无法想出这个程序以这种方式表现的原因,任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:2)

在您的代码中的几个地方,您有&#34; h&#34;和&#34; v&#34;混合。具体来说,您在检查碰撞时似乎field[startv][starth],而在填充方块时似乎field[starth][startv]