【问题标题】:Having trouble getting the rest of the numbers in an Array. Java无法获取数组中的其余数字。爪哇
【发布时间】:2017-09-11 07:19:14
【问题描述】:

在总结前 3 个元素后,我无法获得其余的数字。这是它问我的问题:“编写一个采用数组的方法。return true 如果数组中前三个元素的总和小于数组其余元素的总和。”

因此5 5 5 5 2 2 应该是false。由于前 3 个数字的总和大于 5 2 2 的总和。我的程序对这个问题返回 true,我将不胜感激。

public static boolean sumThree(int [] myArray)
{
    int sum = 0;
    for(int i = 0; i < myArray.length; i++)
    {
        sum += myArray[i];
    }
    int sumof3E = myArray[0] + myArray[1] + myArray[2];
    if(sum > sumof3E)
    {
        return true;
    }
    else if(sumof3E < sum)
    {
        return false;
    }
    else
    {
        return false;
    }
}

【问题讨论】:

  • 为什么要对第一个循环中的所有元素求和?您不应该在第一个 for 循环中包含前 3 个元素。
  • 哇,我真笨,哈哈。感谢您和其他评论者的帮助。昨天这占用了我几个小时的时间!
  • 不客气。请参阅我的答案,以更短的方式完成您的任务。
  • @IDK 还记得每个元素都从索引 0 开始
  • 我猜作业是关于“简单”“经典”for循环...

标签: java arrays if-statement sum boolean


【解决方案1】:

您的代码中有两个问题:

1) 在对数组进行索引之前,您甚至没有验证数组是否包含 3 个元素,这可能会导致错误。

2) 您正在对整个数组求和并将其与前三个元素的总和进行比较...在循环中尝试在循环初始化中初始化 i = 3(假设数组至少有 4 个元素)

伪代码:

public static boolean sumThree(int [] myArray)
{
  if (myArray.length < 4) { return false; }
  var first = myArray[0] + myArray[1] + myArray[2];
  var rest = 0;
  for(int i = 3; i<myArray.length; i++) {
    rest += myArray[i];
  }
  return first < rest;
}

【讨论】:

    【解决方案2】:

    您不应包含数组的前三个元素。这些必须不包括总和。

    将for循环控制变量改成这样:

    for (int i = 3; i < myArray.length; i++) {
          sum += myArray[i];
    }
    

    此外,您应该从代码中删除 else if 块,因为它是多余的(第一个 if 语句检查该条件):

    else if(sumof3E < sum)
    {
         return false;
    }
    

    或者,借助 java 8 特性,您可以将代码缩短为一行

    public static boolean sumThree(int [] myArray){
           return Arrays.stream(myArray).limit(3).sum() < Arrays.stream(myArray).skip(3).sum();
    }
    

    注意 - 使用替代解决方案,即使传入的数组为空,您也不会得到 IndexOutOfBoundsException

    【讨论】:

      【解决方案3】:

      sum 循环需要更改为从索引 2 开始,否则不需要。

      public static boolean sumThree(int[] myArray) {
          int sum = 0;
          for (int i = 3; i < myArray.length; i++) {
              sum += myArray[i];
          }
          int sumof3E = myArray[0] + myArray[1] + myArray[2];
          if (sum > sumof3E) {
              return true;
          }
          else {
              return false;
          }
      }
      

      【讨论】:

      • @NatanyaGanesh i = 2 实际上必须是 i = 3
      【解决方案4】:

      当第一个总和小于其余总和时,无需继续遍历整个数组:

      int sumf3 =0;
      int sumRest=0;
      for (int i = 0; i < myArray.length; i++)
      {
          if (i < 3){
            sumf3 += myArray[i];
          } else {
            sumRest += myArray[i];
          }
          if(sumf3 < sumRest ){
            return true;
          }
      }
      return false;
      

      附:也不需要在循环之前检查数组的大小。

      【讨论】:

        【解决方案5】:

        为了清楚起见,创建一个两个循环,然后使用条件运算符或称为三元运算符来轻松使用 if..else

         int sum1=0;
            int sum2=0;
        
        
            for(int i=0;i<=2;++i)
            {
                sum1+=myArray[i];
            }
            for(int i=3;i<myArray.length;++i)
            {
                sum2+=myArray[i];
            }
            boolean myBool = (sum1>sum2)?false:true;
            return myBool;
        

        【讨论】:

          猜你喜欢
          • 2015-08-20
          • 2022-01-08
          • 1970-01-01
          • 1970-01-01
          • 2011-01-07
          • 1970-01-01
          • 1970-01-01
          • 2011-03-17
          • 1970-01-01
          相关资源
          最近更新 更多