初学者布尔编译错误

时间:2016-11-08 12:14:55

标签: java matrix compilation compiler-errors

我是Java的新手(做初学者大学模块),对于这个可能很愚蠢的问题感到抱歉。我正在尝试验证衣衫褴褛的array是否是'三角矩阵'。

如果第一级length 3和第二级length n − 1nn − 1为{},则有效。我打算提出一个代码,首先验证长度是3,然后找到length中最长的array n,然后最后验证每个length。< / p>

无论出于何种原因,我的代码都无法编译,但我没有看到错误消息,只是在课堂上发现红色感叹号。我认为这意味着存在多个错误。如果有人能指出它们将是一个巨大的帮助。

static boolean isValidTridiagonal ( double [][] m)
{ 
    if (double [][]=new double [3][])
    { 
        int n = 0;
        for(int i = 0; i < m.length; i++)
        {
            if(m[i].length > n)
            {
                n = m[i].length;

                if( (m[0].length = n-1) && (m[1].length = n) &&(m[2].length=n-1))
                {
                    return true

                }
                else
                {
                    return false
                }
            }
                else 
            {
                return false
            }
        }

非常感谢!

3 个答案:

答案 0 :(得分:1)

我赞同Foolish在评论中说使用可以突出语法错误和代码的其他问题的IDE很有帮助,它确实产生了巨大的差异。除此之外,另一个总体策略是始终编写&#34;婴儿步骤&#34;:只做最小的事情来测试代码是否正常工作,编译和测试。如果你仍有麻烦,你可以在搜索有问题的位时注释掉你的代码块。

话虽如此,我在您的代码中看到的错误是:

if (double [][]=new double[3][])

如果要测试输入的长度,可以执行if(m.length == 3)

if( (m[0].length = n-1) && (m[1].length = n) &&(m[2].length=n-1))

你没有测试相等性,而是试图将值n-1等放入m [0] .length,这是行不通的。你可能的意思是

if( (m[0].length == n-1) && (m[1].length == n) &&(m[2].length==n-1))

return true
你错过了一个分号。编译器对此类事情感到不满,除非您使用IDE或学习解释编译器错误消息,否则查找此类错误可能会非常痛苦。

最后,当然,vasste的答案为您的实际任务提供了一个更简单的解决方案,因此值得研究:)。

答案 1 :(得分:0)

为什么你需要所有的循环?如果所有数组都不能为null,那么

static boolean isValidTridiagonal(double[][] m) { return m.length == 3 && m[0].length == m[1].length - 1 && m[2].length == m[0].length; }

答案 2 :(得分:0)

你最后错过了一些大括号,但从你的缩进来看,你只是忘了复制它们。

您在返回行的末尾缺少分号。

此if语句if (double [][] = new double [3][])中的条件不是有效表达式。您只想评估长度,您可以像if (m.length == 3)那样进行评估。你以后做了同样的事情。

包含(m[0].length = n-1) && (m[1].length = n) && (m[2].length=n-1)的行无效,因为您在所有三种情况下都在执行作业(=)。等式检查是双等于运算符==

在每种情况下都不会返回值。您可以通过在第一个if语句的右括号(即函数的最后一行)之后添加return false;来解决此问题。

这足以让您的代码进行编译。正如在另一个答案中所提到的那样,你的逻辑是令人困惑的,并且没有实际跟踪它,我会推测它不会像你期望的那样工作。

如果我已正确理解您的要求,您可以将整个功能重写为:

static boolean isValidTridiagonal ( double [][] m)
{
    return m.length == 3 &&
           m[0].length + 1 == m[1].length &&
           m[2].length + 1 == m[1].length;
}

一个合适的IDE - Netbeans,Eclipse等 - 将为您提供相当描述性的错误消息,以向您显示您出错的地方。

这基本上是完全风格的,但我希望有人早点向我指出这一点。如果您发现自己以这种形式编写代码:

if( (m[0].length == n-1) && (m[1].length == n) && (m[2].length == n-1))
{
    return true;
}
else
{
    return false;
}

知道你可以通过改为编写代码来节省很多行而不会失去任何可读性:

return (m[0].length == n-1) && (m[1].length == n) && (m[2].length == n-1);