Java程序输出奇怪的结果

时间:2014-10-22 12:06:10

标签: java

我的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(" ");
    }      
 }

6 个答案:

答案 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类上的方法来绘制数组。

干杯,