2010-07-16 76 views
1

所以我一直在CodingBat网站上练习我的Java编程技巧,当时遇到this问题。在它里面,你必须做一个简单的方法,它接受一个动态长度的整数数组,检查数组中的元素是否以递增顺序(1,2,3,15678等),并返回“true “如果为真,或者如果整数不按顺序,则为”假“。变量未在for循环中初始化

首先,我初始化一个名为“result”的布尔变量。然后,我遍历该方法传递的整数数组。如果当前索引值小于下一个索引值,则将“result”设置为“true”,然后重复循环。否则,我会将“结果”设置为“假”,跳出循环并将“结果”设置为“假”。在FOR循环之后,我返回“结果”。

但是,我一直在收到一个错误消息,“结果”尚未正确初始化。我可以理解JVM的混淆,但我认为在IF/ELSE语句中设置“result”的值可以解决这个问题。

下面是代码的副本,我迄今所做的:

public boolean scoresIncreasing(int[] scores) { 
    boolean result; 
    for (int i = 0; i < scores.length; i++) { 
     if (i < (i + 1)) { 
      result = true; 
     } 
     else { 
      result = false; 
      break; 
     } 
    } 
    return result; 
} 

回答

2

首先,我<我+ 1将永远是真实的,除非我= Integer.maxValue,在这种情况下,你会绕回到Integer.minValue。

你想要的是分数[i] <分数[i + 1],你需要调整你的循环值以避免索引超出上一次迭代的界限。

所以,你的代码固定:

public boolean scoresIncreasing(int[] scores) { 
    boolean result; 
    for (int i = 0; i < scores.length-1; i++) // fix loop end 
    { 
     if (scores[i] < scores[(i + 1)]) { 
      result = true; 
     } 
     else { 
      result = false; 
      break; 
     } 
    } // missing brace 
    return result; 
} 

试试这个作为替代。它的工作原理是,一旦出现错误,您可以立即离开。

public boolean scoresIncreasing(int[] scores) { 
    boolean result = true; // assume true 
    for (int i = 0; i < scores.length-1; i++) // fix loop end 
    { 
     if (scores[i] > scores[(i + 1)]) return false; 
    } // missing brace 
    return result; 
} 

当然,您可能想在开始时引入边界检查以确保至少有两个值。

0

如果得分为0的元素? ;]

+1

问题描述状态:*数组长度为2或更长* – 2010-07-16 19:41:42

0

在您的代码中,您正在返回for循环内的结果(在if-else语句之后)。

添加return语句之前,另一架(关闭的循环)

1

你只是return result之前缺少一个右括号(})。

为了简化代码(并处理0个元素的数组!),您可能需要将result初始化为true。然后,当您遍历数组时,如果并且仅当您发现某个元素出现乱序,请将result更改为false

另一个警告字。在for循环中使用元素i + 1。想想当你得到数组中的最后一个元素时会发生什么(i == scores.length - 1)。

+0

哎呀!我完全错过了最后一部分!我会在我的代码上解决这个问题。谢谢你的提示! – Jules 2010-07-16 19:45:34

+0

正如巴特提到的,还要确保替换比较数组元素('分数[i]'),*不是*'我'本身。 – 2010-07-16 19:47:05

1

if (i < (i + 1))将始终评估为true。您需要比较这些索引处的数组内容,而不是索引本身。

喜欢的东西:

public boolean scoresIncreasing(int[] scores) { 
    for(int i = 0; i < scores.length-1; i++) { 
    if(scores[i] > scores[i+1]) return false; 
    } 
    return true; 
} 
+0

甜,这工作!谢谢你的提示! – Jules 2010-07-16 19:51:05