2016-11-16 59 views
0

所以我想构造一个程序,它接收两个矩阵的元素并给出这两个矩阵的乘积。到目前为止,我进行了一些尝试,创建了一个矩阵并使用了“readInts” - 手动。首先,我想确保程序实际上接收用户输入的元素,所以我想打印出第一个矩阵作为整体(然后进一步,当然)。这包括在此代码中:2维数组/矩阵的长度

int rows = readInt("Number of rows: "); 
int columns = readInt("Number of columns: "); 
int [][] m = new int[rows][columns]; 
int [] elements = readInts("Please type in the elements: "); 

for(int = 0; i < m.length; i++) { 
print(elements[i], 5); 
} 

现在,我还不明白的是我如何解释“m.length”。经过一些测试后,我发现它指的是行数,所以例如当我定义3行并输入数字1,2,3,4,5时,我只接收到1,2,3 ,所以程序切断了其余部分。我猜他实际上应该是指列的数量,所以当我定义m时,我不得不切换[rows]和[columns],但这是违反直觉的,因为你总是首先命名行数。另外,我不知道迟早会不会出现其他问题。那么,还有没有在开始时切换[rows]和[columns]的方法呢?

+0

什么是'readInt'和'readInts'?这些不是标准的Java方法... – assylias

+0

哦,我不知道。 “readInt”读取一个整数,而“readInts”读取多个整数。打印这些元素时,它们从一开始就位于同一行。 – Julian

+0

在继续之前,您应该知道1件事。在java中,如果你创建了这样的二维数组,那个数组不一定等价于矩阵。特别是如果你从控制台逐行填充数组等等。二维数组只是一个数组类型的数组,每个数组的长度可能会不同,如果你不小心。 – halil

回答

1

因为你知道行和列你可以做2循环。

int rows = readInt("rows"); 
int columns =readInt("columns"); 
int [][] m = new int[rows][columns]; 
for (int i = 0; i < rows; i++) { 
    int n[]=readInts("enter 3 numbers:"); 
    for (int k = 0; k < columns; k++) { 
     m[i][k] = n[k]; 
    } 
} 

没有必要像我一样使用扫描仪(在这里工作不正常)。但 这应该会给你想要的结果,如果你阅读正确的字符串

+0

这给了我“在线程中的异常”main“java.lang.ArrayIndexOutOfBoundsException:3在Matrix.main(Matrix.java:15)”。 – Julian

+0

哦,我看到了问题。我必须直接输入9个数字。但实际上,用户应该在行中输入行数,所以他应该输入3个数字,然后输入,然后再输入3个数字,依此类推。 – Julian

+0

并且该输入只能存储在m?还是在元素? – XtremeBaumer