基本上,这是一个循环,其中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);
答案 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();
}
}
}