Java编码马尔可夫矩阵

问题描述 投票:0回答:1

美好的一天!

我当前的代码有问题。我正在尝试编写一个带有标题的方法 公共静态布尔 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;
}
java multidimensional-array methods
1个回答
0
投票

您当前的代码正在检查 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;
  }
© www.soinside.com 2019 - 2024. All rights reserved.