我是Java的新手(做初学者大学模块),对于这个可能很愚蠢的问题感到抱歉。我正在尝试验证衣衫褴褛的array
是否是'三角矩阵'。
如果第一级length
3和第二级length
n − 1
,n
和n − 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
}
}
非常感谢!
答案 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);