首页 > 解决方案 > 如何使用 math.random 重新随机化网格上的图

问题描述

我将 3 个字符(两个“T”和一个“S”)分配给 10 x 10 网格。我把它记下来了,但我想知道如果它们最终在同一个位置,我如何重新随机化 char 的位置。基本上我正在创建一个小游戏,我是一名士兵(S),并且在一个有两个目标(T)的网格上。最终我将不得不消除目标,但我想确保每个目标最终都在自己的位置。这是我的代码

import java.lang.Math;
public class PaintBall_Thomas{
    public static void fillGrid(char[][] battleField){
      for ( int i = 0; i < battleField.length; i++){
        for ( int j = 0; j < battleField[i].length; j++){
          battleField[i][j] = '-';
        }
      }
      battleField[((int)(Math.random()*10))][((int)(Math.random()*10))] = 'S';//assigns a random number between 1-10 and assigns it to either soldier/target
      battleField[((int)(Math.random()*10))][((int)(Math.random()*10))] = 'T';
      battleField[((int)(Math.random()*10))][((int)(Math.random()*10))] = 'T';
      for ( int i = 0; i < battleField.length; i++){
        for ( int j = 0; j < battleField[i].length; j++){

          System.out.print(battleField[i][j] + " ");
        }
        System.out.println();
      }
    }//end of fillGrid method
    public static void main(String[] args) {
      int columns = 10;
      int rows = 10;
      System.out.println("----------GRID----------");
      //end of main
      char[][] battleField = new char [rows][columns];
      fillGrid(battleField);
  }
}

标签: javarandommethodsgrid

解决方案


这可能是递归的一个很好的用途,所以就像

public void addChar(char type) {
    int row = (int)(Math.random() * battleField.length); // choose rand spot
    int col = (int)(Math.random() * battleField.length);

    if (battleField[row][col] == '-') { // if chosen space is free
        battleField[row][col] = type; // add it
    } else {
        addChar(type) // try again if space was occupied
    }
}

所以这可能会有一些问题......例如如果板子已经满了,可能会出现堆栈溢出......但是如果该方法的唯一预期用途是添加两个 T 和一个 S,那应该没问题

所以你可以像这样添加它们

addChar('T');
addChar('T');
addChar('S');

并且没有一个选择的点会重复


推荐阅读