System.out.printlns错误打印多次而不是一次? (Java - 新信息)

时间:2015-06-08 21:59:50

标签: java arrays

基本上,这是一个循环,其中if input.equals的东西很好,但对于最后的其他如果(炸弹一个)它由于某种原因打印出2或3或其中一个哎哟你被击中,在同时减去3 *它被打印的次数。为什么这样做,我该如何解决?我认为当减去尝试时,是否有可能重新启动while循环? Bombs [] []是一个双暗阵列,它存储真值和假值来定义是否存在炸弹。我很确定问题是if-else语句的设置虽然:/我只是想到当我将input.equals(pos [] [])添加到最后一个else-if语句时,它会打破打印从Ouch消息中删除所有内容。当我输入所有其他变量时,它可以工作但不是那个。

boolean[][]bombs = new boolean[10][10];
    while(bombs2>=0)
    {
    for(int a=0; a<=9;a++)
    {
        for(int b=0;b<=9;b++)
        {
            if(bombs2>=0)
            {
            random2 = (int)(Math.random()*100);
            if((random2 == 48) && tof[a][b] == false)
            {
            bombs[a][b] = true;
            bombs2--;
            }

            else
            {
                bombs[a][b] = false;
            }
           }
        }
    }
    }

int tries = 13;
  while(playing==true && tries>0)
    {
    Scanner next = new Scanner(System.in);    
    System.out.println("Coordinate: ");
    System.out.println("testing");
    String input = next.nextLine();
    for(int m = 0; m<=9;m++)
    {
        for(int n = 0; n<=9;n++)///Output after each coordinate is guessed.
        {
            if ((input.equals(pos[m][n])) && tof[m][n] == true && m == vertcol && n == horcol && bombs[m][n] == false)
            {
                System.out.println("Congratulations! You won the game and found the coordinate!");
                playing = false;
            }
            else if ((input.equals(pos[m][n])) && tof[m][n] == false && m == vertcol && n!= horcol && bombs[m][n] == false)
            {
                System.out.println("Miss, but the square you are looking for is somewhere in this vertical column.");
                tries--;
            }
            else if ((input.equals(pos[m][n])) && tof[m][n] == false && n == horcol && m!= vertcol&& bombs[m][n] == false)
            {
                System.out.println("Miss, but the square you are looking for is somewhere in this horizontal column.");
                tries--;
            }
            else if((input.equals(pos[m][n])) && tof[m][n] == false && n!= horcol && m!= vertcol&& bombs[m][n] == false)
            {
                System.out.println("Complete Miss.");
                tries--;
            }
            **else if(bombs[m][n] == true)
            {
                System.out.println("Ouch! You got hit by a bomb! Minus three tries.");
                tries -= 3;**
            }
        }
    }
}
System.exit(0);

2 个答案:

答案 0 :(得分:3)

random2 = (int)(Math.random()*100);
        if(random2 == 49 && bombs2>0 && tof[a][b] == false && bombs[a][b] == false)

这里不能保证random2 永远等于49.因此,你没有看到任何炸弹。

另外,我不确定为什么你的一些变量最后有2个。如果您需要对变量进行编号,则通常表明它们的命名不正确。例如,据我所知,你的二维数组实际上不是一个炸弹阵列,而是代表一个炸弹场(?)。

答案 1 :(得分:0)

如果您的目标是将10个炸弹随机放入10x10网格中(10个真实数据组成10个10个数组),那么这与将10个项目随机放入100个插槽中的情况基本相同。一种简单的方法是使用List,对List进行随机播放,然后与洗牌列表进行交互。请注意,java.util.Lists必须使用引用类型而不是基本类型,因此如果它们填充了布尔值,则必须使用布尔值。如果你想坚持你的布尔数组,那么你可以使用List<Integer> shuffle它,然后删除列表中的前10个混洗整数并以这种方式分配你的炸弹。例如:

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class BombArray {
   private static final int SIDE = 10;
   private static final int BOMB_COUNT = 10;
   // default filled with 0
   private static boolean[][] bombs = new boolean[SIDE][SIDE];

   public static void main(String[] args) {
      // create our List if Integer
      List<Integer> intList = new ArrayList<>();
      // fill it with monotonically increasing ints
      for (int i = 0; i < SIDE* SIDE; i++) {
         intList.add(i);
      }
      // shuffle the collection
      Collections.shuffle(intList);
      // take the first 10 items and use the value to place bombs
      // into our array
      for (int i = 0; i < BOMB_COUNT; i++) {
         int randomValue = intList.remove(0);
         int row = randomValue / SIDE;
         int col = randomValue % SIDE;
         bombs[row][col] = true;
      }

      // test the code out
      System.out.println("Lets test the array:\n");
      for (int row = 0; row < bombs.length; row++) {
         for (int col = 0; col < bombs[row].length; col++) {
            boolean bomb = bombs[row][col];
            String text = bomb ? " *T* " : "  F  ";
            System.out.print(text);
         }
         System.out.println();
      }

   }
}