因此,我在当地的高中帮助辅导Algebra 2班,该班级目前正在学习矩阵。尽管不存在,但它们最终将实现矩阵乘法。去年上了计算机科学并学习了Java之后,我帮助的老师认为我应该尝试针对多个矩阵编写程序。
目前,我要定义第一个数组的数字,该数组保存第一个矩阵的信息。但是,我有一个小问题。如下图所示:
要求索引整数的行在已经记录整数之后重复进行。我认为这是由于我分层的for循环引起的,但我不能确定。通常,新手会看到问题更清晰。任何可以帮助我的人都会感激不尽。
代码:
package matrixmultiplication;
import java.util.*;
public class MatrixMultiplication {
public static void main(String[] args) {
System.out.println("What is the size of the first matrix?");
int matrix1Rows = matrixRows();
int matrix1Columns = matrixColumns();
int[] matrix1 = new int[matrix1Rows * matrix1Columns];
doubleSpace();
System.out.println("What is the size of the second matrix?");
int matrix2Rows = matrixRows();
int matrix2Columns = matrixColumns();
int[] matrix2 = new int[matrix2Rows * matrix2Columns];
doubleSpace();
if (matrix1Columns != matrix2Rows){
System.out.println("These cannot be multiplied!");
System.exit(0);
} else {
matrix1Numbers(matrix1Rows, matrix1Columns);
}
}
public static int matrixRows(){
System.out.print("Rows:");
Scanner rowSc = new Scanner(System.in);
int rows = rowSc.nextInt();
return rows;
}
public static int matrixColumns(){
System.out.print("Columns:");
Scanner colSc = new Scanner(System.in);
int cols = colSc.nextInt();
return cols;
}
public static int[] matrix1Numbers(int rows, int cols){
int[] numb = new int[rows * cols];
for (int j = 0; j <= numb.length; j += rows){
for (int i = 1; i <= cols; i++){
for (int k = 1; k <= rows; k++){
System.out.println("What is the value for index (" + k + "," + i + ")?");
Scanner inp = new Scanner(System.in);
if (j + k <= numb.length){
numb[j + k - 1] = inp.nextInt();
}
}
}
}
for (int i = 0; i < numb.length; i++){
System.out.println(numb[i]);
}
return numb;
}
public static void doubleSpace(){
System.out.println();
System.out.println();
}
}
我使用NetBeans 8.2和适用于NetBeans的Java的最新工作版本。
答案 0 :(得分:0)
我对矩阵乘法包不熟悉,所以我可能在这里闲逛。
for (int j = 0; j <= numb.length; j += rows){
我不确定您的外部for循环是什么用途,但是这个最外部的for循环使您要求的索引cols值比您想要的多。 我觉得您最初想使用此外部for循环遍历每行,也许不打算让第二个for循环遍历cols吗?
此外,凯文·安德森(Kevin Anderson)也在上面提到了这一点。如果返回一个double int数组而不是将所有值存储在一个维度中,则可能会完全避免此问题。我个人认为这会更有意义。
只是挑剔,但每次您想以其他方式使用扫描仪时,我都不会制造新的扫描仪。您可以在类的顶部创建一个字段,在您的main方法中实例化一次,然后使用扫描器将它作为参数传递给所有方法。