繁体   English   中英

尝试在Java中打印2d元素数组

[英]Trying to print a 2d array of elements in Java

在我正在制作的名为Flood It的游戏中,我无法打印正在制作的具有以下构造函数的对象:

Dot(int x, int y, int color)

我有三个类,一个类是DotInfo.java:

public class DotInfo {


private int x;
private int y;
private int color;
private boolean captured;

public DotInfo(int x, int y, int color){
    this.x = x;
    this.y = y;
    this.color = color;
    captured = false;
}

public int getX(){
    return x;
}

public int getY(){
    return y;
}


public void setCaptured(boolean captured) {
    this.captured = captured;
}

public boolean isCaptured(){
    return captured;
}

public int getColor() {
    return color;
}

}

我的第二个类是GameModel.java:

import java.util.Random;

public class GameModel {


/**
 * predefined values to capture the color of a DotInfo
 */
public static final int COLOR_0           = 0;
public static final int COLOR_1           = 1;
public static final int COLOR_2           = 2;
public static final int COLOR_3           = 3;
public static final int COLOR_4           = 4;
public static final int COLOR_5           = 5;
public static final int NUMBER_OF_COLORS  = 6;

public static DotInfo[][] dots;
private DotInfo dot;
private int size;
private int currentColor;
private Random generator;
private int steps;
private String rep;

/**
 * Constructor to initialize the model to a given size of board.
 * 
 * @param size
 *            the size of the board
 */
public GameModel(int size) {
    this.size = size;
}


/**
 * Resets the model to (re)start a game. The previous game (if there is one)
 * is cleared up . 
 */
public void reset(){
    int color = 0;
    dots = new DotInfo[size][size];
    for (int i=0;i<size;i++) {
        for (int j=0;j<size;j++) {
            new DotInfo(i, j, generator.nextInt(NUMBER_OF_COLORS)+1);
            System.out.println(dots[i][j]);
        } 
    }
}


/**
 * Getter method for the size of the game
 * 
 * @return the value of the attribute sizeOfGame
 */   
public int getSize(){
    return size;
}

/**
 * returns the current color  of a given dot in the game
 * 
 * @param i
 *            the x coordinate of the dot
 * @param j
 *            the y coordinate of the dot
 * @return the status of the dot at location (i,j)
 */   
public int getColor(int i, int j){
    int color=0;
    for (int x=0;x<size;x++) {
        for (int y=0;y<size;y++) {
            if (dots[x][y].getX()==i && dots[x][y].getY()==j) {
                color=dots[x][y].getColor();
            }
        }
    }
    return color;
}

/**
 * returns true is the dot is captured, false otherwise
* 
 * @param i
 *            the x coordinate of the dot
 * @param j
 *            the y coordinate of the dot
 * @return the status of the dot at location (i,j)
 */   
public boolean isCaptured(int i, int j){
    boolean capture = true;
    for (int x=0;x<size;x++) {
        for (int y=0;y<size;y++) {
            if (dots[x][y].getX()==i && dots[x][y].getY()==j) {
                capture=dots[x][y].isCaptured();
            }
        }
    }
    return capture;   
}

/**
 * Sets the status of the dot at coordinate (i,j) to captured
 * 
 * @param i
 *            the x coordinate of the dot
 * @param j
 *            the y coordinate of the dot
 */   
public void capture(int i, int j){
    for (int x=0;x<size;x++) {
        for (int y=0;y<size;y++) {
            if (dots[x][y].getX()==i && dots[x][y].getY()==j) {
                dots[x][y].setCaptured(true);
            }
        }
    }  
}


/**
 * Getter method for the current number of steps
 * 
 * @return the current number of steps
 */   
public int getNumberOfSteps(){
    return steps;
}

/**
 * Setter method for currentSelectedColor
 * 
 * @param val
 *            the new value for currentSelectedColor
*/   
public void setCurrentSelectedColor(int val) {
    currentColor = val;
}

/**
 * Getter method for currentSelectedColor
 * 
 * @return currentSelectedColor
 */   
public int getCurrentSelectedColor() {
    return currentColor;
}


/**
 * Getter method for the model's dotInfo reference
 * at location (i,j)
 *
  * @param i
 *            the x coordinate of the dot
 * @param j
 *            the y coordinate of the dot
 *
 * @return model[i][j]
 */   
public DotInfo get(int i, int j) {
    for (int x=0;x<size;x++) {
        for (int y=0;y<size;y++) {
            if (dots[x][y].getX()==i && dots[x][y].getY()==j) {
                dot = dots[x][y];
            }
        }
    }
    return dot;
}


 /**
 * The metod <b>step</b> updates the number of steps. It must be called 
 * once the model has been updated after the payer selected a new color.
 */
 public void step(){
    steps++;
}

 /**
 * The metod <b>isFinished</b> returns true iff the game is finished, that
 * is, all the dats are captured.
 *
 * @return true if the game is finished, false otherwise
 */
public boolean isFinished(){
    boolean flag=true;
    for (int x=0;x<size;x++) {
        for (int y=0;y<size;y++) {
            if (dots[x][y].isCaptured()==false) {
                flag=false;
            }
        }
    }
    return flag;
}


 /**
 * Builds a String representation of the model
 *
 * @return String representation of the model
 */
public String toString(){
    for (int x=0;x<size;x++) {
        for (int y=0;y<size;y++) {
            rep += "Dot("+dots[x][y].getX()+", "+ dots[x][y].getY()+", "+dots[x][y].getColor()+")";
        }
    }
    return rep;
}
}

我运行所有内容的主要类是Floodit.java

public class FloodIt {


 /**
 * <b>main</b> of the application. Creates the instance of  GameController 
 * and starts the game. If a game size (<12) is passed as parameter, it is 
 * used as the board size. Otherwise, a default value is passed
 * 
 * @param args
 *            command line parameters
 */
 public static void main(String[] args) {
  GameModel model = new GameModel(5);
  model.reset();
  System.out.println(model);

  }


}

有人可以告诉我为什么我调用reset()方法时数组不会更新吗?

您忘记将新的DotInfo()对象分配给数组的每个位置。

该行:

new DotInfo(i, j, generator.nextInt(NUMBER_OF_COLORS)+1);

应该:

dots[i][j] = new DotInfo(i, j, generator.nextInt(NUMBER_OF_COLORS)+1);

在reset方法中,您有一个for循环在做:

 dots = new DotInfo[size][size];
    for (int i=0;i<size;i++) {
        for (int j=0;j<size;j++) {
            new DotInfo(i, j, generator.nextInt(NUMBER_OF_COLORS)+1);
            System.out.println(dots[i][j]);
        } 
    }

这条线,

new DotInfo(i, j, generator.nextInt(NUMBER_OF_COLORS)+1);

什么都没做...

您正在创建一个对象,是的,但是没有将其分配给任何对象,因此该对象正在丢失。

您必须将该新对象分配给2D数组中的元素...

dots[i][j] = new DotInfo(i, j, generator.nextInt(NUMBER_OF_COLORS)+1);

编辑:

另一方面,您需要初始化generator对象:

public GameModel(int size) {
    this.size = size;
    generator = new Random();

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM