扫描矩阵中的数字

时间:2014-11-30 03:38:46

标签: java matrix

我目前正在寻找一种用Java扫描2D矩阵的方法。确切地说,如果在我的矩阵中,有0到9之间的数字,我如何“找到”0?这是用于创建扫雷游戏。

这是我到目前为止所写的内容。它不完整。我只想知道如何完成它。

class DemineurStackOverflow {

  public static void minesweeper () {

    int champDeMine[][];
    boolean résultat[][];
    int mine;
    char réponse;

    champDeMine = new int[longueur][largeur]; //Differenf from the matrix "champDeMines" from the second method
    Arrays.asList(champDeMine).contains(0);
    mine = (int) Math.floor(Math.random()*nbMines + 1);
    System.out.println("Ajustement du nombre de mines en cours...");
    if (mine < nbMines) {
      for (mine = (int) Math.floor(Math.random()*nbMines + 1); mine < nbMines; mine++);
    } else {
      for (mine = (int) Math.floor(Math.random()*nbMines + 1); mine > nbMines; mine--);
    }

    if (mine == nbMines){
      System.out.println("Chargement des mines OK.");
    }
  }

  public static int [][] calculeProximité ( boolean [][] champDeMines ){
    int row; //row index for prescence of 0, same value as longueur
    int col; //column index for presence of 0, same value as largeur
    int mine;

    champDeMines = new boolean[row][col];
    if (champDeMines = 0) {
      champDeMines = mine;
    }

    //Here I am trying to figure a way of finding the 0s in this champDeMines matrix.

    return (new int[champDeMines.length][champDeMines[0].length]);
  }
}

第一种方法是从变量“longueur”和“largeur”生成数组。在随机的地方,“地雷”的数量应该代表数字0(这就是我想要扫描0的原因)。第二种方法是在创建的数组中找到“地雷”。这就是我遇到的麻烦。你有完成第二种方法的 线索 吗?我只是在寻找线索,因为我正在学习用Java编程!

非常感谢,非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

这是扫雷场地人口可以从所提供的代码中看出来的样子。我希望你能从评论中得到线索,并毫不犹豫地询问是否有任何不清楚的地方。

import java.util.Random;

public class Demineur 
{
    // Here come CONSTANTS
    public static final int     MAX_MINES = 30;
    public static final boolean MINE      = true;

    // Let's have a field 12x12 size
    public static final int LONGEUR   = 12;
    public static final int LARGEUR   = 12;

    // each field contains number of mines it has access to
    public static int     champDeMine[][]  = new int[LONGEUR][LARGEUR];

    // each field can contain mine or be empty
    public static boolean champDeMines[][] = new boolean[LONGEUR][LARGEUR];

    public static void minesweeper() 
    {
        Random  random  = new Random();
        int     mine           ;

        System.out.println("Ajustement du nombre de mines en cours...");
        int     nbMines = random.nextInt(MAX_MINES);

        /**
         * Let's plant mines. :-E
         * Unoptimal but will suffice for demonstration purpose.
         */
        int minesLeftToPlant = nbMines;
        int skip             = 0;
        boolean planted      = false;
        while (minesLeftToPlant > 0)
        {
            skip    = random.nextInt(LONGEUR*LARGEUR);
            planted = false;
            while (!planted && minesLeftToPlant > 0 && skip > 0)
            {
                for (int y = 0; !planted && minesLeftToPlant > 0 && y < LONGEUR; y++)
                {
                    for (int x = 0; !planted && minesLeftToPlant > 0 && x < LARGEUR; x++)
                    {
                        if (   !MINE == champDeMines[y][x] 
                            && 0 == skip)
                        {
                            champDeMines[y][x] = MINE;
                            minesLeftToPlant--;
                            planted = true;
                        }
                        else
                        {
                            skip--;
                        }
                    }
                }
            }
        }
        System.out.println("Chargement des "+ nbMines +" mines OK.");
    }

    public static void calculeProximite()
    {
        int row ; //row index for prescence of 0, same value as longueur
        int col ; //column index for presence of 0, same value as largeur
        int mine;

        //Check for each field it's neighbors and calculate which of them are mines
        for (row = 0; row < LONGEUR; row++)
        {
            for (col = 0; col < LARGEUR; col++)
            {
                champDeMine[row][col] = numberOfMines(row,col);
            }
        }

    }

    public static void printChampDeMine()
    {
        for (int row = 0; row < LONGEUR; row++)
        {
            for (int col = 0; col < LARGEUR; col++)
            {
                System.out.print("'" + champDeMine[row][col] + "' ");
            }
            System.out.println();
        }
    }

    public static void printChampDemines()
    {
        for (int row = 0; row < LONGEUR; row++)
        {
            for (int col = 0; col < LARGEUR; col++)
            {
                System.out.print("'" + (champDeMines[row][col] ? "m" : "e") + "' ");
            }
            System.out.println();
        }
    }

    public static int numberOfMines(int row, int col)
    {
        return add(hasMine(row    , col + 1))
            +  add(hasMine(row - 1, col + 1))
            +  add(hasMine(row - 1, col    ))
            +  add(hasMine(row - 1, col - 1))
            +  add(hasMine(row    , col - 1))
            +  add(hasMine(row + 1, col - 1))
            +  add(hasMine(row + 1, col    ))
            +  add(hasMine(row + 1, col + 1));
    }

    public static boolean hasMine(int row, int col)
    {
        return row >= 0 && col >= 0 && row < LONGEUR && col < LARGEUR 
            && isMine(champDeMines[row][col]);
    }

    public static boolean isMine(boolean x)
    {
        return MINE == x;
    }

    public static int add(boolean c)
    {
        return c ? 1 : 0;
    }

    public static void main(String[] args)
    {
        minesweeper();
        System.out.println("Champ de mines");
        printChampDemines();
        System.out.println("Champ de mine");
        calculeProximite();
        printChampDeMine();
    }
}