我的java代码输出有问题。 我试图实现这个乘法矩阵方法,它编译得很好。唯一的问题是我的输出。我似乎得到了以下内容:
---- Test Multiply Matrix ----
[[D@7f31245a
Should return C={{ 3, 2},{ 1, 1}}
有人可以帮我理解我在哪里错了。谢谢! 这是我的源代码:
public class Recommendation
{
public static double[][] multiplyMatrix(double[][] A, double[][] B)
{
int aRows = A.length;
int bRows = B.length;
int aColumns = A[0].length;
int bColumns = B[0].length;
if((aColumns != bRows))
{
return null;
}
else
{
double[][] C = new double[aRows][bColumns];
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 2; j++)
{
C[i][j] = 0;
}
}
for (int i = 0; i < aRows; i++)
{
for (int j = 0; j < bColumns; j++)
{
for (int k = 0; k < aColumns; k++)
{
C[i][j] += A[i][k] * B[k][j];
}
}
}
return C;
}
}
static double [][] A = {{ 1, 0, 2},
{ 0, 1, 1}};
static double [][] B = {{1, 2},
{ 0, 1},
{ 1, 0}};
public static void main(String[] argss)
{
// TEST multiplyMatrix
System.out.println(" ---- Test Multiply Matrix ---- ");
System.out.println(multiplyMatrix(A,B)); // should return C={{ 3, 2},{ 1, 1}}
System.out.println("Should return C={{ 3, 2},{ 1, 1}}");
System.out.println(" ");
}
}
答案 0 :(得分:3)
您可能希望使用java.util.Arrays中的Arrays.toString来打印数组。
或者,如果您希望输出更加自定义,则可以对数组进行迭代。
答案 1 :(得分:1)
请注意,Arrays.toString单独帮助您,因为您的数组是二维的。
它仍会打印出以下形式的内容:[[I@355d56d5, [I@2efd552, [I@4f9dfbff]
相反,你可以这样做:
double[][] C = multiplyMatrix(A,B);
for (double[] subArray : C) {
System.out.print (Arrays.toString (subArray));
System.out.print (" , ");
}
System.out.println();
或者,您可以使用Arrays.deepToString(C)
来处理层次结构。
答案 2 :(得分:1)
#deepToString
返回&#34;深层内容&#34;的字符串表示形式。的 指定的数组。如果数组包含其他数组作为元素,则 字符串表示包含其内容等。 此方法 用于将多维数组转换为字符串。
您应该将java.util.Arrays.deepToString(array)
用于多维数组。目前,您正在打印Object
引用的String
表示。
您可以使用#replace
方法将[]
替换为{}
//...
public static void main(String[] argss){
// TEST multiplyMatrix
System.out.println(" ---- Test Multiply Matrix ---- ");
double array[][] = multiplyMatrix(A,B);
String finalString = Arrays.deepToString(array)
.replace("[", "{")
.replace("]", "}");
System.out.println(finalString);
}//...
答案 3 :(得分:0)
public static double[][] multiplyMatrix(double[][] A, double[][] B)
。
在这里你返回一个双数组。这不是原始类型。因此,将使用数组的默认 toString()方法(其中打印classname@hashCode
,因此输出)。您必须使用Arrays.toString()
正确打印值。
答案 4 :(得分:0)
您可以使用Arrays#deepToString()
:
System.out.println(Arrays.deepToString(multiplyMatrix(A,B)));
multiplyMatrix
返回一个数组,它是一个对象,并且在Java中,因为每个对象都有toString()
方法,默认显示类名表示,然后添加{ {1}}签名然后是哈希码。
为了更好地了解此处发生的情况,请参阅Arrays.deepToString
的实施。
请注意,如果您想要对输出进行更多控制,例如过滤一些数组或改变显示它们的方式,你可以有嵌套循环。
答案 5 :(得分:0)
[[D@7f31245a
表示Double
的二维数组,后跟实际对象的哈希码。
您的multiplyMatrix()
方法正好返回此值,但调用的toString()
方法是Object
上的方法,它会打印出来。您需要使用Arrays
类上的方法来绘制数组。
干杯,