Java 方法输出一个值,但不带“quot;S.O.P';d"+;获取/设置方法问题

Java 方法输出一个值,但不带“quot;S.O.P';d"+;获取/设置方法问题,java,arrays,methods,Java,Arrays,Methods,这是我的案子。当它运行时,它接受用户输入的输入,并用它创建一个“图像”: 在这种情况下,将调用initializeImage方法: public static void initializeImage (int row, int column) { char[][] image = new char[row][column]; for (int i = 0; i < column; i++) { for (int j = 0; j &

这是我的案子。当它运行时,它接受用户输入的输入,并用它创建一个“图像”:

在这种情况下,将调用initializeImage方法:

public static void initializeImage (int row, int column)
{        
    char[][] image = new char[row][column];
    for (int i = 0; i < column; i++)
    {
        for (int j = 0; j < row; j++)
        {
            image[j][i] = WHITE;
            System.out.print(image[j][i]);
        }
        System.out.println();
    }
    setImage(image);
}
这个方法还有一个void返回类型,所以我认为它不能输出数组。如果你想知道为什么我有这个方法,我有很多其他方法更新/更改图像。此方法跟踪最新的图像

当执行
初始化
案例时,不应显示数组,但它确实显示了。如何停止此问题?

如果你不介意我再问一个问题,这是我的案子。当用户想要查看输出时,执行SAVE

case SAVE:
{
    System.out.println(getImage());
    break;
}
它应该显示来自
getImage()
方法的图像

public static char[][] getImage()
{
    return newImage;
}
该方法应该从setImage()方法获取newImage的值。相反,
newImage
获取值(或缺少值)null。我研究过传递引用和传递值,但我不理解这个想法。或者更具体地说,在这种情况下如何实现它们。我这样宣布newImage:

public static char[][] newImage;
我的逻辑是,由于它是公共的,
getImage()
方法将能够使用
newImage
数组。直到我意识到我使用了
char[][]newImage
作为`setImage()中的参数。现在我觉得我陷入了僵局如何更改get/set方法,使其能够成功返回最新图像。

我不确定Stack Overflow在一个线程中问两个问题时的策略是什么。如有必要,我将这一部分编辑掉,并单独提问

任何和所有的帮助都将不胜感激

编辑:输入和输出

它现在看起来是什么样子

I 2 3
00
00
00
S one
null
它应该是什么样子的:

I 2 3
S one
00
00
00
编辑:新建
setImage()
方法:

public static void setImage(char[][] newImage)
{
    newImage = image;
}
public static void setImage(char[][] newImage)
{
    this.newImage = newImage;
}

它仍然会给出错误“非静态,无法从静态上下文引用。”

对于第一个问题,不要使用initializeImage方法,而是使用

    char[][] image = new char[row][column];
    setImage(image);
而不是initializeImage(),这样它就不会打印字符[][]了

对于第二个问题,在设置图像开关中

newImage = image;


因此,映像始终是映像的最新版本,您可以在其他任何地方使用映像,并且它将是最新的。

您的逻辑似乎有点缺陷:void方法确实具有输出数据的能力,就像返回方法一样。例如,
Throwable
类的
printStackTrace()
方法是一个无效的方法,但它可以打印整个堆栈跟踪,其中可能包含大量数据。因此,如果不希望打印数组,只需从
初始化图像
方法中的
for
循环中删除
System.out.print(image[j][i])
语句即可

关于返回null的
getImage
方法,请再看一看您的
setImage
方法。变量
image
正在为
newImage
赋值(可能是空值)。因此,最终您的
getImage
方法将返回存储在
newImage
中的值,该值为null

setImage
方法中,尝试重命名方法参数。例如:

public static void setImage(char[][] image)
{
    newImage = image;
}

如果我理解正确,程序正在打印数组的所有元素。对吧?对。我只希望它在执行SAVE case时这样做。嗯。。。那你能给我们提供你的密码吗?(请记住发布一个请…)我无法删除initializeImage方法,因为我需要它来创建图像。我尝试了你对第二个问题的建议,但它仍然返回null。我确信这是因为我事先声明了newImage,所以我删除了它。现在需要在getImage中使用setImage()的值。不过我不知道该怎么做。顺便说一句,谢谢你。用我在第二个问题中所说的话回答一下,会发生什么问题?还修复了您的第一个建议的第一个问题,我是否应该用您所说的替换对initializeImage()方法的调用?如果是,那么图像将在哪里创建?至于第二个问题,我用输入和输出更新了原始帖子。第一个输入/输出是在我尝试您的建议之后发生的情况第一个问题:不,我的意思是,在初始化器案例中不要使用initializeImage。第二个问题要消除错误不要使用这个,它在您的上下文中不起作用,在您的情况下,使用YourClassName.newImage,或者重命名变量。虽然我没有另一个名为newImage的类实例,但我不明白为什么“S one”在错误的时间出现。我有实例字段publicstaticchar[][]newImage。我尝试过这样做。newImage=newImage,但它给出了错误“非静态变量this不能从静态上下文引用”。抱歉,id我成了一个麻烦,但我不太明白您所说的“通过这种方式,您可以将类变量newImage设置为char[][]方法参数newImage”是什么意思。我更新了原始帖子以包含我当前的setImage()方法。对不起,我假设setImage是一个实例方法。但是您不能更改方法参数的名称吗?你能把它重命名为
image
(这样你就有了
publicstaticvoidsetimage(char[]]image){newImage=image;}
)?我把参数char[][]newImage重命名为char[][]image,错误就消失了,但是当调用getImage时,它仍然返回null。我的意思是
newImage
将被设置为存储在方法参数中的值。见我编辑的帖子。而且你不是个麻烦:)
image = newImage;
public static void setImage(char[][] image)
{
    newImage = image;
}