2016-11-08 92 views
0

我对Java很陌生(做一个初学者大学模块),所以对于这个可能很愚蠢的问题感到抱歉。我试图验证一个衣衫褴褛的array是否是“三对角矩阵”。初学者布尔编译错误

它是有效的,如果它是length 3在第一水平和lengthn − 1nn − 1在第二级。我打算拿出一个代码,首先验证长度是3,然后找到其中最长的lengtharray其中n,然后最后验证每个length

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

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 
      } 
     } 

非常感谢!

+1

你应该使用IDE喜欢的NetBeans或Eclipse和你可以阅读错误,告诉你'语法错误,插入“;”完成BlockStatements' – Foolish

回答

0

为什么你需要所有的循环?如果所有阵列不能为空,比

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

+0

谢谢!我想我是在过度复杂的问题...真的很感谢帮助 – hii

1

我的,因为它是有帮助的使用可以突出语法错误和其它问题代码的IDE的意见愚蠢的同意,那真叫一个巨大的差异。除此之外,另一个一般策略是始终以“宝贝步骤”编码:如果代码正常工作,经常编译和测试,则只做最小的测试。如果你仍然有麻烦,你总是可以在搜索有问题的位时注释掉你的代码块。

说了这么多,我在你的代码中看到的错误是:

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

如果你想测试输入的长度,你可以做,如果(m.length == 3)

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

你没有测试的平等,而是试图把n的值-1等为m [0]。长度,这是行不通的。你大概的意思是

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

return true 

你错过了一个分号。编译器对这样的事情发愁,除非你使用IDE或学习解释编译器错误消息,否则找到这样的错误可能会非常痛苦。

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

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); 
+0

非常感谢!真的很感谢解释 – hii