Java 如何确定堆栈中的邻居

Java 如何确定堆栈中的邻居,java,stack,multidimensional-array,Java,Stack,Multidimensional Array,基本上,我用随机生成的方式制作一个迷宫,遵循以下逻辑: 他们说我应该试着在一堆东西中确定我的邻居,但我被困在如何确定的问题上。我决定试试他们的逻辑,但改用2D数组。然而,这给整个重编程带来了其他问题:如何重新访问单元或以其他方式在二维数组中删除它 我的代码到目前为止。我这里也有一个问题:我试图让一个字段在面板上自行绘制,但它不起作用:我只得到一个黑色背景颜色,没有线条/正方形 所以,我的问题是:如何最好地确定邻居并用我所拥有的创建随机迷宫 及 为什么我的基本方格场没有画出来 import jav

基本上,我用随机生成的方式制作一个迷宫,遵循以下逻辑:

他们说我应该试着在一堆东西中确定我的邻居,但我被困在如何确定的问题上。我决定试试他们的逻辑,但改用2D数组。然而,这给整个重编程带来了其他问题:如何重新访问单元或以其他方式在二维数组中删除它

我的代码到目前为止。我这里也有一个问题:我试图让一个字段在面板上自行绘制,但它不起作用:我只得到一个黑色背景颜色,没有线条/正方形

所以,我的问题是:如何最好地确定邻居并用我所拥有的创建随机迷宫

为什么我的基本方格场没有画出来

import java.awt.Graphics;

/* @author chris */

public class Field {

    private int   fieldData, 
                  fieldSize;

    public Field( int fieldData , int fieldSize ) {

        this.fieldData = fieldData;
        this.fieldSize = fieldSize;

    }

    /**
     *
     */
    public Field() {

    }

    public void paint(int rows , int cols , Graphics g) {


        int x = 0;
        int y = 0;

        int x2 = fieldSize;
        int y2 = fieldSize;

        for( int i = 0 ; i < rows ; i++ ) {

            for( int j = 0 ; j < cols ; j++ ) {

                g.drawLine( x , y , x , y2 ); // n
                g.drawLine( x , y2 , x2 , y2 ); // e 
                g.drawLine( x2 , y , x2 , y2 ); // s
                g.drawLine( x , y , x2 , y ); // w

                if( j != cols-1 ) {

                    x = x+fieldSize;
                    x2 = x2+fieldSize;

                }else { 

                    y = y+fieldSize;
                    y2 = y2+fieldSize;
                    x = 0;
                    x2 = fieldSize;

                }
            }
        }

    }

}
导入java.awt.Graphics;
/*@作者克里斯*/
公共类字段{
私有int fieldData,
字段大小;
公共字段(int fieldData,int fieldSize){
this.fieldData=fieldData;
this.fieldSize=字段大小;
}
/**
*
*/
公共领域(){
}
公共空白绘制(整数行、整数列、图形g){
int x=0;
int y=0;
int x2=字段大小;
int y2=字段大小;
对于(int i=0;i
这是我小组的代码。makeItAMaze方法是我一直坚持的方向

import java.awt.Color;
import java.awt.Graphics;
import java.util.Random;
import javax.swing.JPanel;

/* @author chris */

public class LevelPanel extends JPanel {

private final int rows = 20;
private final int cols = 40;
private final int fieldSize = 20;

private Field[][] map = new Field[cols][rows];



LevelPanel() {

    setBackground( Color.BLACK );

 }


public void generateMap() {

    for ( int j = 0 ; j < rows ; j++ ) { // 2d array
        for ( int i = 0 ; i < cols ; i++ ) {

            // Determine position, give appropriate border
            if( j > 0 && i > 0 && j < cols && i < rows ) { 

                // North, east, south, west for backtrack, solution, border, wall
                Field f = new Field(0000000000001111, fieldSize ); // center
                f = map[i][j];

            }else if( i == 0 && j == 0 ) {

                Field f = new Field(0000000010011111, fieldSize); // nw
                f = map[i][j];

            }else if( j > 1 && i == 0 && j < cols ) {

                Field f = new Field(0000000010001111, fieldSize ); // n
                f = map[i][j];

            }else if( i == 0 && j == cols ) {

                Field f = new Field(0000000011001111, fieldSize ); // ne
                f = map[i][j];

            }else if( i > 0 && j == cols && i < rows ) {

                Field f = new Field(0000000001001111, fieldSize ); // e
                f = map[i][j];

            }else if( j == cols && i == rows ) {

                Field f = new Field(0000000001101111, fieldSize ); // se
                f = map[i][j];

            }else if( j > 0 && j < cols && i == rows ) {

                Field f = new Field(0000000000101111, fieldSize ); // s
                f = map[i][j];

            }else if( j == 0 && i == rows ) {

                Field f = new Field(0000000000111111, fieldSize ); // sw
                f = map[i][j];

            }else if( j == 0 && i > 0 && i < rows ) {

                Field f = new Field(0000000000011111, fieldSize ); // w
                f = map[i][j];

            }
        }
    }

    makeItAMaze();

} // ends generateMap()

@Override
 protected void paintComponent(Graphics g) {

     super.paintComponent(g);

     int x = 0;
     int y = 0;

     int x2 = fieldSize;
     int y2 = fieldSize;

     for( int i = 0 ; i < rows ; i++ ) {

        for( int j = 0 ; j < cols ; j++ ) {

            // TODO: need to draw from a Field

            Field f = new Field();
            f.paint( rows , cols , g );

        }
    }

} // ends paintComponent


public void makeItAMaze() {

    Random r = new Random();

    int totalFields = rows * cols;
    int fieldsTogo = 0;

    while ( fieldsTogo < totalFields ) {



    }
导入java.awt.Color;
导入java.awt.Graphics;
导入java.util.Random;
导入javax.swing.JPanel;
/*@作者克里斯*/
公共类LevelPanel扩展了JPanel{
私有最终整数行=20;
私人最终整数=40;
专用最终整型字段大小=20;
私有字段[][]映射=新字段[cols][rows];
LevelPanel(){
挫折地面(颜色:黑色);
}
公共无效生成器映射(){
对于(int j=0;j0&&i>0&&j1&&i==0&&j0&&j==cols&&i0&&j0&&i<行){
字段f=新字段(0000000000011111,字段大小);//w
f=映射[i][j];
}
}
}
makeItAMaze();
}//结束generateMap()
@凌驾
受保护组件(图形g){
超级组件(g);
int x=0;
int y=0;
int x2=字段大小;
int y2=字段大小;
对于(int i=0;i
您设置了背景色,但我看不出您在绘制线条时在何处设置了前景色。它可能是用黑色绘制的。

已经有一段时间了,没有人给出正确的答案,所以我将发布我找到的解决方案

我的第一个问题的解决方案是,为了保存邻居,不应该使用堆栈,而应该使用HashMap。您通常想知道如何从当前位置(移动方向)查找邻居,该位置可以用作HashMap中的键

至于第二个绘制问题。在代码中,我再次开始创建一个新的字段实例,而在前面的方法中我已经创建了十几个。更好的做法是在一个循环中创建一组具有默认值的字段,然后在另一个方法/循环中更改创建的字段


发生实际绘制错误是因为paintComponent是我创建此类时初始化的第一个方法。这导致我基本上试图绘制一个根本不存在或没有任何数据的字段。解决方案是将字段的初始化移到构造函数中,而不是移到方法中。

Java a如果背景为黑色,则自动以白色前景色绘制。