简体   繁体   English

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

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

In the game that I am making called Flood It I am having trouble printing the objects that I am making which have a constructor that is: 在我正在制作的名为Flood It的游戏中,我无法打印正在制作的具有以下构造函数的对象:

Dot(int x, int y, int color)

I have three classes one class is DotInfo.java: 我有三个类,一个类是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;
}

}

My second class is GameModel.java: 我的第二个类是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;
}
}

My main class that runs everything is Floodit.java 我运行所有内容的主要类是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);

  }


}

Can someone tell me why my array will not update when i call my reset() method? 有人可以告诉我为什么我调用reset()方法时数组不会更新吗?

You forgot to assign the new DotInfo() objects to every position of the array. 您忘记将新的DotInfo()对象分配给数组的每个位置。

The line: 该行:

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

should be: 应该:

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

in the reset method you have a for loop doing: 在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]);
        } 
    }

this line, 这条线,

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

is doing NOTHING.... 什么都没做...

You are creating an object, yes, but not assigning it to nothing, so that object is getting lost.... 您正在创建一个对象,是的,但是没有将其分配给任何对象,因此该对象正在丢失。

You have to assign that new object to the element in the 2D array... 您必须将该新对象分配给2D数组中的元素...

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

Edit: 编辑:

on the other hand, you need to init the generator object: 另一方面,您需要初始化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