如何停止在java中打印空矩阵

如何停止在java中打印空矩阵,java,matrix,Java,Matrix,虽然这段代码工作并执行,但它有一个问题。代码的目标是在矩阵中移动[x]。但在完成第一行后,它会打印一个完全空白的数组。这意味着没有一点同时存在i==x和j==y 然后,在它再次打印之后,它继续它停止的地方。这意味着它永远不会按分配的打印完成阵列的循环 展示我的意思的图片: 我该如何解决这个问题?这是因为在else属性moveX激活之后,j==0和y==1;至少,这是我必须假设的是空白打印。 public class MovingX { private int rowsN;

虽然这段代码工作并执行,但它有一个问题。代码的目标是在矩阵中移动[x]。但在完成第一行后,它会打印一个完全空白的数组。这意味着没有一点同时存在
i==x
j==y

然后,在它再次打印之后,它继续它停止的地方。这意味着它永远不会按分配的打印完成阵列的循环

展示我的意思的图片:

我该如何解决这个问题?这是因为在
else
属性
moveX
激活之后,
j==0
y==1
;至少,这是我必须假设的是空白打印。

public class MovingX {
 
    private int rowsN;  
    private int columnsM;    
    private int[][] matrixArr = new int[rowsN][columnsM];
    private int x = 0;    
    private int y = 0;
    
    public MovingX(int n, int m) {
       rowsN = n;        
       columnsM = m;       
       matrixArr = new int[n][m];       
    }
    
    public void forLoopGrid() {
        for(int i = 0; i < matrixArr.length; i++) {
            for(int j = 0; j < matrixArr.length; j++) {
                if(i == x && j == y) System.out.print("[x] ");   
                else {
                    System.out.print("[ ] ");
                }
            }
            System.out.println();
        }
        System.out.println();
    }
    
    public void moveX() {      
         if(x < 4) x++;
         else { 
            x = 0; 
            y++;
         } 
    }
    
    public void runProgram() {
        System.out.println("Program Starting");
        System.out.println("Rows, Columns: " + rowsN + " " + columnsM);
        for(int i = 0; i < (rowsN * columnsM); i++) {
            forLoopGrid();
            moveX();
        }
        System.out.println("Program Ending");
    }
    
    public static void main(String[] args) {         
        MovingX xLoop =  new MovingX(4, 4);
        xLoop.runProgram();        
    }
}
公共类MovingX{
私有内部rowsN;
私人专栏;
私有int[]matrixArr=新int[rowsN][columnsM];
私有整数x=0;
私有整数y=0;
公共移动X(整数n,整数m){
rowsN=n;
柱状SM=m;
matrixArr=新整数[n][m];
}
公共void forLoopGrid(){
对于(int i=0;i
在函数中
moveX()
您应该更改if语句中的条件。以下为正确版本:

public void moveX(){

    if(x < 3) x++;
    else{
        x = 0;
        y++;
    }

}
public void moveX(){
如果(x<3)x++;
否则{
x=0;
y++;
}
}

0索引在各种循环中都可能扮演一个棘手的角色。由于您的
moveX()
方法上升到
x=4
,因此最多的for的0索引计数为0,1,2,3,4。这是5个要素。你的矩阵是4x4。您需要一个x=3的计数,即0,1,2,3。4个元素

您必须将
moveX()
更改为

public void moveX(){
     if (x < 3) 
         x++;
     else { 
         x = 0; 
         y++;
     } 
}
public void moveX(){
if(x<3)
x++;
否则{
x=0;
y++;
} 
}

完美。非常感谢。我现在明白为什么了。它实际上是x的原因,<4实际上是0 1 2 3 4,而不是4行和4列,即0 1 2 3