Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 矩阵的元素是内存地址,而不是元素的值_Java_Math_Matrix - Fatal编程技术网

Java 矩阵的元素是内存地址,而不是元素的值

Java 矩阵的元素是内存地址,而不是元素的值,java,math,matrix,Java,Math,Matrix,我有一个矩阵作业。当我运行程序时,在控制台中,它总是按内存地址返回,而不是按值返回。 我是欧洲人,我用的是德语。我想也许本地化是个问题,所以我改成了我们,但这并不能解决我的问题 在控制台中: [[D@459189e1, [D@55f33675] [[D@527c6768, [D@65690726] 这是我的代码: import java.util.Arrays; import java.util.Locale; import java.util.Scanner; public class

我有一个矩阵作业。当我运行程序时,在控制台中,它总是按内存地址返回,而不是按值返回。 我是欧洲人,我用的是德语。我想也许本地化是个问题,所以我改成了我们,但这并不能解决我的问题

在控制台中:

[[D@459189e1, [D@55f33675]
[[D@527c6768, [D@65690726]
这是我的代码:

import java.util.Arrays;
import java.util.Locale;
import java.util.Scanner;


public class Inverse2x2Matrix {

    public static double[][] inverse2x2Matrix(double[][] A) {
        double det = A[0][0] * A[1][1] - A[0][1] * A[1][0];
        double m00 = -1 * A[1][1] / det;
        double m01 = A[0][1] / det;
        double m10 = A[1][0] / det;
        double m11 = -1 * A[0][0] / det;
        double[][] B = { { m00, m01 }, { m10, m11 } };
        return B;
    }

    public static void main(String[] args) {

        Locale.setDefault(Locale.US);

    System.out.println("Enter a, b, c, d: 0");
    Scanner sc = new Scanner(System.in);
    String input=sc.next();
    sc.close();

    double[][] A = new double[2][2];
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 2; j++) {
            A[i][j] = Double.parseDouble(input);
        }
    }

        System.out.println(Arrays.toString(A));
        System.out.println(Arrays.toString(inverse2x2Matrix(A)));
    }
        double[][] C = {{1.0,2.0},{3.0,4.0}};
    System.out.println(Arrays.toString(C));
    System.out.println(Arrays.toString(inverse2x2Matrix(C)));

}
导入java.util.array;
导入java.util.Locale;
导入java.util.Scanner;
公共类逆矩阵{
公共静态双[][]逆2x2矩阵(双[][]A){
双det=A[0][0]*A[1][1]-A[0][1]*A[1][0];
双m00=-1*A[1][1]/det;
双m01=A[0][1]/det;
双m10=A[1][0]/det;
双m11=-1*A[0][0]/det;
双[]B={{m00,m01},{m10,m11};
返回B;
}
公共静态void main(字符串[]args){
setDefault(Locale.US);
System.out.println(“输入a、b、c、d:0”);
扫描仪sc=新的扫描仪(System.in);
字符串输入=sc.next();
sc.close();
double[]A=新的double[2][2];
对于(int i=0;i<2;i++){
对于(int j=0;j<2;j++){
A[i][j]=Double.parseDouble(输入);
}
}
System.out.println(Arrays.toString(A));
System.out.println(Arrays.toString(inverse2x2Matrix(A));
}
double[]C={{1.0,2.0},{3.0,4.0};
System.out.println(Arrays.toString(C));
System.out.println(Arrays.toString(inverse2x2Matrix(C));
}

A
是数组的数组,因此当您键入
Arrays.toString(A)
时,它会获取
A
的每个内部数组,并在其上调用
toString
,从而返回类似地址的表示。您需要手动迭代
A

for (double[] ar : A) {
    System.out.println(Arrays.toString(ar));
}
或写入帮助器方法:

private static void printArray(double[][] ar) {
    for (double[] inner : ar) {
        System.out.println(Arrays.toString(inner));
    }
}
更新


JB Nizet的建议要好得多。

A
是数组的数组,因此当您键入
数组时。toString(A)
会获取
A
的每个内部数组,并对其调用
toString
,它会返回类似地址的表示。您需要手动迭代
A

for (double[] ar : A) {
    System.out.println(Arrays.toString(ar));
}
或写入帮助器方法:

private static void printArray(double[][] ar) {
    for (double[] inner : ar) {
        System.out.println(Arrays.toString(inner));
    }
}
更新


JB Nizet的建议要好得多。

用于以递归方式漂亮地打印数组的内容。否则,数组的每个元素都使用其
toString
方法打印,该方法确实会打印其类型,后跟其哈希代码。

用于递归地漂亮地打印数组的内容。否则,数组的每个元素都使用其
toString
方法打印,该方法确实会打印其类型,后跟其哈希代码。

谢谢,您的答案是解释我为什么有问题:)谢谢,您的答案是解释我为什么有问题:)