美好的一天!
我当前的代码有问题。我正在尝试编写一个带有标题的方法 公共静态布尔 isMarkovMatrix(double[][] m) 应该检查矩阵是否是正马尔可夫矩阵。 然后在 main 方法中,我尝试提示用户输入一个 3×3 双精度值矩阵,然后测试输入的矩阵实际上是否是正马尔可夫矩阵。 更清楚地说,正马尔可夫矩阵是每个元素均为正且每列元素之和为 1 的矩阵。
这是我当前的代码,无论我输入什么,它都会继续告诉我,当我知道它是积极的MM时, 我对编码还很陌生,到目前为止只上了两门课程,所以我不知道任何太高级的东西,仅供参考,谢谢!希望有人能帮忙...
public static void main(String[] args) {
Scanner kbd = new Scanner (System.in);
double[][] matrix = new double [3][3];
System.out.println("Enter a 3-by-3 matrix row by row: ");
for(int row = 0; row < 3; row++){
for(int column = 0; column < 3; column++){
matrix[row][column] = kbd.nextDouble();
}
kbd.nextLine();
}
//output
if(isMarkovMatrix(matrix)){
System.out.println("It is a Markov Matrix.");
} else if (!isMarkovMatrix(matrix)){
System.out.println("It is not a Markov Matrix");
}
}
public static boolean isMarkovMatrix(double[][] m){
double sum;
boolean answer = true;
for(int row = 0; row < m.length; row++){
sum = 0;
for(int column = 0; column < m.length; column++){
sum += m[row][column];
if (sum != 1 || m[row][column] < 0){
answer = false;
}
}
}
return answer;
}
您当前的代码正在检查 ROW 的总和,而不是列的总和。此外,退出嵌套 for 循环后,您需要检查总和是否为 1;否则,在您有机会将所有数字相加之前,您将确定它“不是”有效的矩阵。
因此,您需要交换 for 循环中行/列的顺序,并将总和为 1 的检查移到嵌套 for 循环之后。
看起来更像是:
public static boolean isMarkovMatrix(double[][] m){
double sum;
for(int column = 0; column < m.length; column++){
sum = 0;
for(int row = 0; row < m.length; row++){
sum += m[row][column];
if (m[row][column] < 0){
return false;
}
}
if (sum != 1.0) {
return false;
}
}
return true;
}