Java 关于数组元素减法和比较的逻辑

Java 关于数组元素减法和比较的逻辑,java,logic,Java,Logic,我为下面的问题编写了代码,但输出并不像预期的那样。我不知道我的代码是否有问题。逻辑似乎很好。有人能看到我的代码是否有问题吗 给定一个按递增顺序排序的分数数组,如果该数组包含3个相邻的分数,它们之间的差异最多为2,例如{3,4,5}或{3,5,5},则返回true 我的源代码如下: public boolean scoresClump(int[] scores) { boolean result = false; for(int i=0; i<scores.length-

我为下面的问题编写了代码,但输出并不像预期的那样。我不知道我的代码是否有问题。逻辑似乎很好。有人能看到我的代码是否有问题吗

给定一个按递增顺序排序的分数数组,如果该数组包含3个相邻的分数,它们之间的差异最多为2,例如{3,4,5}或{3,5,5},则返回true

我的源代码如下:

public boolean scoresClump(int[] scores) {

    boolean result = false;

    for(int i=0; i<scores.length-2; i++){
        if((scores[i+1]-scores[i])<=2 && (scores[i+2]-scores[i+1])<=2){
            result = true;
            break;
        }
    }

    return result;
}
public boolean scorescump(int[]分数){
布尔结果=假;

对于(int i=0;i您的
for
循环应该是
for(int i=0;i首先,如果您遇到错误或意外行为,您应该描述它是什么(例如,预期和实际输出)

在您的情况下,我可以在代码中发现至少一个错误:您访问循环分数[I+2]。当我转到length-1时,您访问length+1。即使访问length+0也已经是一个错误,因为最后一个元素的索引length-1。您没有显示完整的代码,但我假设由于引发的异常,调用函数中的结果被解释为false

此外,这两个检查是不必要的,一个检查就足够了,因为您将在下一次迭代中执行下一个检查。

尝试以下方法:

    public boolean scoresClump(int[] scores) {
boolean result=false;
for(int i=0; i<scores.length-2; i++){
        if(Math.abs(scores[i]-scores[i+1])<=2 &&
        Math.abs(scores[i+1]-scores[i+2])<=2 &&
        Math.abs(scores[i]-scores[i+2])<=2){
            result=true;
        }
}
return result;
}
public boolean scorescump(int[]分数){
布尔结果=假;

对于(inti=0;i,你的前一篇文章没有考虑非相邻值之间的差值

public boolean scoresClump(int[] scores) {
  boolean result = false;

  for(int i=0; i<scores.length-2; i++){
      if((scores[i+2]-scores[i])<=2){
          result = true;
          break;
      }
  }

  return result;
}
public boolean scorescump(int[]分数){
布尔结果=假;

for(int i=0;i-scorescump({3,4,5})→ true-scorescump({3,4,6})→ false-scorescump({1,3,5,5})→ true这些是测试数组输出不符合预期的含义..?我认为您可能需要分数。长度-2..您可以在此尝试代码这是我编辑的代码:公共布尔分数循环(int[]分数){boolean result=false;for(int i=0;我没有将更新后的代码作为注释或链接发布。请更新问题。我已重新调整了代码。仍然没有意义。我现在已将链接附加到问题。为什么要记分({3,4,6})应该是假的?这就是我感到困惑的原因。我不知道带答案的样本测试问题是否已损坏。3和6之间的增量是3,而不是所有3个值之间的最大差值必须是3,因此问题是要求数字三元组的第一个和最后一个数字的差值不应超过2,而不是每个成员彼此不同当从左向右移动时超过2?
如果数组包含3个相邻分数,且彼此之间最多相差2,则返回true,这就是为什么(3,4,6)会导致false@JohnB即使给定的三个测试都通过了,您的代码也会因为{3,10,5}之类的错误而失败。所以这并不是很有启发性。当然,它很容易修复,但随后会出现代码重复。您必须检查所有三个唯一对,然后这个数字会爆炸,以向更长的块推广。@MarkoTopolnik问题指出:
给定一个按递增顺序排序的分数数组