当前位置: 首页 > 知识库问答 >
问题:

检查用户输入的3x3多维数组是否是马尔可夫矩阵

薛烨
2023-03-14

我试图编写一个java程序,打印用户输入的3x3多维数组是否是马尔可夫矩阵;提示如下。

-n x n矩阵被称为正马尔可夫矩阵,如果每个元素都是正的,并且每个列中元素的和是1。编写以下方法来检查矩阵是否是马尔可夫矩阵。

公共静态布尔isMarkovMatrix(双[][]m)

-编写一个测试程序(主要方法),提示用户输入一个3 x 3——双值矩阵,并测试它是否是马尔可夫矩阵。

我对代码的输出显示,无论我输入什么,它都不是马尔可夫矩阵,也不知道为什么会这样。顺便说一句,我不知道任何复杂的java,而且只上了几个星期的课,所以下面是我java编程技能的程度。任何帮助都将不胜感激!提前谢谢你。

import java.util.Scanner;

public class Problem3 {

    public static void main(String[] args) {
        //declarations 
        double[][] markov = new double[3][3];
        Scanner keyboard = new Scanner(System.in);

        //input 
        System.out.print("Please enter numbers to fill up a 3x3 matrix: ");
        for (int i = 0; i < markov.length; i++) {
            for (int x = 0; x < markov.length; x++) {
                markov[i][x] = keyboard.nextDouble();
            }
        }

        //output
        if (isMarkov(markov) == true) {
            System.out.print("Your matrix is a Markov Matrix!");
        } else if (isMarkov(markov) == false) {
            System.out.print("Your matrix is not a Markov Matrix!");
        }

        //close keyboard
        keyboard.close();

    }

    //method to check whether the matrix is positive
    public static boolean isPositive(double[][] array) {
        //declarations 
        boolean answer = true;

        //processing
        for (int i = 0; i < array.length; i++) {
            for (int x = 0; x < array.length; x++) {
                if (array[i][x] < 0) {
                    answer = false;
                }
            }
        }
        return answer;
    }

    //method to check whether the sum of the columns are 1
    public static boolean columnSum(double[][] array) {
        //declarations 
        double sum = 0;
        boolean answer = true;

        //processing
        for (int i = 0; i < array.length; i++) {
            for (int x = 0; x < array.length; x++) {
                sum += array[i][x];
            }
            if (sum != 1) {
                answer = false;
            }
        }
        return answer;
    }

    //method to check whether the matrix is a Markov matrix
    public static boolean isMarkov(double[][] array) {
        //declarations
        boolean answer = false;

        //processing 
        if ((isPositive(array) == true) && (columnSum(array) == true)) {
            answer = true;
        }
        return answer;

    }

}

共有1个答案

傅振濂
2023-03-14

您的问题在于columnSum(双[]数组)函数。不会在每列之后重置总和值。这意味着您的代码对值总和中的所有列求和。简单地在外部for循环中将sum重置为零应该可以防止这种情况。如果还有问题,请告诉我,我会再检查一遍。

//method to check whether the sum of the columns are 1
public static boolean columnSum (double[][] array)
{
    //declarations 
    double sum = 0; 
    boolean answer = true;

    //processing
    for (int i = 0; i < array.length; i++)
    {
        sum = 0; //-----------------added-----------------
        for (int x = 0; x < array.length; x++)
        {
            sum += array[i][x]; 
        }
        if (sum != 1)
        {
            answer = false; 
        }
    }
    return answer;  
}

另一方面,这只是一个小好事,因为你对编码有些陌生。当计算布尔值时,你不需要添加==true或==false。值本身是布尔的。这里给出的例子:

//instead of
if (flag == false){}
//do
if (!flag){}

如果你不知道,“!”否定了表达式。如果你想评估“真”,只需删除“!”。

 类似资料:
  • 问题内容: 检查数组是 原始值的平面数组 还是 多维数组 的最有效方法是什么? 没有实际循环遍历数组并在其每个元素上运行的方法,有没有办法做到这一点? 问题答案: 简短的答案是,如果“第二维”可能在任何地方,您都必须至少隐式​​循环才能做到。如果必须在第一项中,您只需 但是,我能找到的最有效的通用方法是在数组上使用一个foreach循环,每当找到一个命中点时就会短路(至少隐式循环比直接的for()

  • 问题内容: 没有,是否有任何方法可以查看值中是否存在?我发现 但这只会搜索数组的第一维,而我需要搜索2维。 问题答案: 我创建了一个5x5整数数组,并将其值i * j初始化。 方法采用要搜索的行号和值。

  • 问题内容: 我正在学习“困难方式” Python35。下面是原始代码,我们被要求对其进行更改,以便它可以接受其中不包含0和1的数字。 这是我的解决方案,可以很好地运行并识别浮点值: 通过搜索类似的问题,我找到了一些答案,这些答案可以帮助我编写另一个解决方案,如下面的代码所示。问题是,使用isdigit()不允许用户输入浮点值。因此,如果用户说要取50.5%,它将告诉他们学习如何键入数字。否则它适用

  • 我有一个操作/方法来执行对数据库的插入。它需要几个字段,由于各种原因,操作可能会失败,因为一个或多个输入不是唯一的,或者因为它们与一些需要唯一的内部记录冲突。 反对这种方法的人指出,我们开发团队知道会导致失败的每个错误情况,应该返回错误代码并使用它来处理每个情况。 我看不出检查方法有任何明显的缺点。这些错误情况很有可能发生,您绝对必须在使用saveUserInfo()的任何地方解决它们。似乎正是为

  • 问题内容: 我有一个多维数组,例如(这可以有很多层次): 我试图遍历它以查看是否存在某个键: 但它什么也没找到。循环中有错误吗? 问题答案: 我玩过您的代码以使其正常工作:

  • 问题内容: 我知道我可以这样做: 然后只需编写语句中所需的代码。 还有其他方法可以检查它们是否相等? 问题答案: 怎么了 if(!Arrays.equals(array1,array2)) 与相同,即是同一数组。这不是大多数人期望的。 比较数组的内容。