如何在java的主方法中实现公共void方法

如何在java的主方法中实现公共void方法,java,methods,void,Java,Methods,Void,我已经在StackOverflow上冲浪了大约一个小时,寻找这个非常简单的问题的答案,但似乎没有一个答案适用于这种特殊情况 import java.awt.Color; public class Question15 { public void fillCheckerBoard(Color[][] board){ for(int n = 0; n < board.length; n++){ for(int k = 0; k < b

我已经在StackOverflow上冲浪了大约一个小时,寻找这个非常简单的问题的答案,但似乎没有一个答案适用于这种特殊情况

import java.awt.Color;
public class Question15 {

    public void fillCheckerBoard(Color[][] board){

        for(int n = 0; n < board.length; n++){

            for(int k = 0; k < board[0].length; k++){

                if((k%2==0 && n%2 ==0)||(k%2==1 && n%2 ==1)){
                    board[n][k] = Color.black;
                }
                else{
                    board[n][k] = Color.white;
                }

                if(board[k][n] == Color.black){
                    System.out.print("x");
                }
                else
                    System.out.print(" ");
            }
        }


    }

    public static void main(String[] args) {


        Color [][] a = new Color [4][5];
        Question15 b = new Question15(); 
        b.fillCheckerBoard(a);
        System.out.print(b);
    }

}
导入java.awt.Color;
公开课问题15{
公共空白棋盘格(彩色[]棋盘){
用于(int n=0;n
CreateCheckboard方法采用颜色[][]数组,并根据二维数组中指定的尺寸创建棋盘

在主方法中,我创建了一个名为“a”的2D颜色数组和一个名为“b”的新对象。我想用“a”作为输入来测试fillcheckboard方法。一旦“a”被修改,我想打印出“a”,看看我的棋盘格是否有效。我制作了一个Question15对象,因为据我所知,一个void方法需要一个对象才能工作


我在void方法中所做的只是在尝试运行程序时返回一个错误。如何测试我的方法是否可以打印出棋盘格?

鉴于您的方法正在更改传入的参数
a
,您可能希望将其打印出来。尝试
System.out.println(Arrays.deepToString(a))
而不是
System.out.println(b)

下面的一行是抛出ArrayIndexOutOfBoundException,因为颜色数组中只有4行,此行尝试访问颜色数组的第5行

if(电路板[k][n]==颜色.黑色){


逻辑上可能有一些问题。

首先,你的问题很模糊。但据我所知,你需要创建一个棋盘,并用X和O填充它。现在,为了创建和显示一个棋盘,你需要Java applet类。Java applet类的一个特点是它不需要主me法德。 以下代码根据输入创建棋盘格

import java.applet.Applet;
import java.awt.Color;

import java.awt.Graphics;

public class Checkerboard extends Applet {

private static final long serialVersionUID = 1L;

    public void paint(Graphics g) {

        int row;
        int col;
        int x, y;

        for (row = 0; row < 4; row++) {

            for (col = 0; col < 5; col++) {
                x = col * 40;
                y = row * 40;
                if ((row % 2) == (col % 2)) {
                    g.setColor(Color.white);
                } else {
                    g.setColor(Color.black);
                }
                g.fillRect(x, y, 40, 40);
            }

        }

    }
}
import java.applet.applet;
导入java.awt.Color;
导入java.awt.Graphics;
公共类棋盘扩展小程序{
私有静态最终长serialVersionUID=1L;
公共空间涂料(图g){
int行;
int col;
int x,y;
用于(行=0;行<4;行++){
用于(列=0;列<5;列++){
x=col*40;
y=行*40;
如果((行%2)=(列%2)){
g、 setColor(Color.white);
}否则{
g、 设置颜色(颜色为黑色);
}
g、 fillRect(x,y,40,40);
}
}
}
}
或者,如果你想使用main方法打印输出,那么你就不需要Color类。你可以通过一个普通的2维数组作为参数来实现。我没有对你的代码做太多修改,但是请仔细阅读下面的代码,看看你需要什么

import java.awt.Color;

public class Question15 {

    public void fillCheckerBoard(Color[][] board) {

        for (int row = 0; row < board.length; row++) {

            for (int column = 0; column < board[0].length; column++) {

                if ((row % 2) == (column % 2)) {
                    board[row][column] = Color.black;
                } else {
                    board[row][column] = Color.white;
                }

                if (board[row][column] == Color.black) {
                    System.out.print("X ");
                } else
                    System.out.print("O ");
            }
            System.out.println("");
        }

    }

    public static void main(String[] args) {

        Color[][] a = new Color[4][5];
        Question15 b = new Question15();
        b.fillCheckerBoard(a);
    }
}
导入java.awt.Color;
公开课问题15{
公共空白棋盘格(彩色[]棋盘){
对于(int row=0;row
我不理解这个问题。您希望发生什么,实际发生了什么?您是否刚刚尝试运行应用程序?此代码将编译并运行,但由于两个错误(一个在第二个循环中,另一个在打印时检查电路板颜色)将抛出ArrayIndexOutOfBoundsException。可能与…重复,也可能不涉及代码的其他问题,也可能无法准确打印所需内容…您应该在内部循环(即外部循环的最后一行)之后添加
System.out.println();
,如果您希望它看起来像一块板;否则,它将全部作为一条长线打印。另外,将
board[k][n]
更改为
board[n][k]
在第二个
if
中,为了避免
数组索引超出边界的异常
。它实际上不改变变量
a
是吗?它传递
a
,但从不返回任何内容。改变的变量将是参数
board
,但不会返回。它正在改变
a
,就像
a
>和
board
是内存中同一数组的两个名称。虽然从你的问题中猜测,但这是一个比你想要/需要的更复杂的概念。我认为java不是通过引用传递的,而是通过值传递的。所以这两个变量应该有两个不同的内存块,对吗?它不会改变变量
a,但它确实修改了
a
引用的对象。没错,它是传递值,但可变对象类型(如数组)仍然是可变的。如果在
f中写入
board=null