尝试使用2d数组

时间:2018-04-12 03:29:56

标签: arrays 2d minesweeper

我试图创建像模拟一样的扫雷,当0清除且X是我的时,用户输入地雷数量并使用随机生成器将其放置在2D数组中。当我运行它的网格打印,但我得到java.lang.ArrayIndexOutOfBoundsException:4并不知道如何解决它。我以前从未使用过二维数组。

   import java.util.Scanner;
   import java.util.Random;

  public class Minesweeper {


          private  static  int count = 0;  /* used to count the number of mines */

         public static void main ( String [] args) {

              int r = 12;
              int c = 12;
              int ground [][] = new int [r][c]; //2D array 12 x 12 
              int a = 0;  // variable to print 0's as an integer instead of a string 


                    Scanner sc=new Scanner(System.in); // scanner for the user to input number of mines 

        System.out.print("Enter mines: ");
        Random myRandom = new Random();
        int N; // N is the variable for the number of mines 
        N = sc.nextInt(); // scanner to input the number 

        for (int k = 0; k < ground.length; k++) { // nested loop to print a 12 x 12 grid

             for (int j = 0; j < ground.length; j++) {
               System.out.print(" " + a + " " ); // prints the 0s

          }
                System.out.println();
      }


        while(count <=  N) { // loop to count the mine numbers the user chose
                         /* if count < N, we need to put more mines */


                        do {
                                 r = myRandom.nextInt(12); // generate the mines in random places
                                 c = myRandom.nextInt(12);

                        }   while(mineOrNot(r, c) == false);


                       count += 1;// count to place the right amount of mines 
        }


    }

// function to make sure no 2 mines are in the same location 
        public  static  boolean  mineOrNot(int r, int c) {
            int ground [][] = new int [r][c];
           // if theres no mines its ok to place one 
         if(ground[r][c] == 0) {
             ground[r][c] = 1; // it is ok, put a mine at here 
             return true;
         }
         else 
           return false;
           }

  }

1 个答案:

答案 0 :(得分:0)

由于我不是用Java编写代码,因此我只能告诉您为何会收到此错误的基础知识。它基本上是开始使用数组的权利,甚至有经验的程序员在某些情况下也会不时遇到这个问题。

Array Indexing in Java

基本上,您正在尝试访问此阵列的一部分,而该部分在您为其设置的范围内不存在。

E.G。您正在访问元素13,null并尝试使用它,从而导致错误。

如果可以(不要使用Java,我认为Oracle具有此功能),请插入一个断点并逐步完成每次迭代,并尝试精确计算阵列上的滴答。

它应该保持在0到11之间,因为Java中的数组索引从0开始。

因此 1 - 12 单元格成为索引

0 - 11