Java - 汇总除特定部分之外的数组值

Java - Summing up values of Array except a specific section

我的任务是对数组的所有值求和,除了以 6 开头的部分,直到下一个 7 出现。 7 之后的值将再次添加到我的总和中。

这是我的解决方案之一:

        if(nums == null){
            return 0;
        }else if(nums.length == 0){
            return 0;
        }else{
            int sum = 0;
            int countTill7 = 0;
            boolean six = false;

            for(int i = 0; i < nums.length; i++){
                if(nums[i] != 6){
                    sum += nums[i];
                }else if(nums[i] == 6){
                    six = true;
                    countTill7++;
                }else if(six == true && nums[i - 1] == 7){
                    six = false;
                    sum += nums[i];
                }

            }

            return sum;
        }

我找不到问题..

以下是我对数组的所有值求和的方法,除了以 6 开头直到下一个 7 出现的部分

package codingbat.array3;

public class Sum67
{
    public static void main(String[] args) 
    {
    }

    /**
     * Return the sum of the numbers in the array, 
     * except ignore sections of numbers starting with a 6 and
     * extending to the next 7 
     * (every 6 will be followed by at least one 7). 
     * Return 0 for no numbers.
     *
     * sum67({1, 2, 2}) → 5
     * sum67({1, 2, 2, 6, 99, 99, 7}) → 5
     * sum67({1, 1, 6, 7, 2}) → 4
     */
    public int sum67(int[] nums) 
    {
        int sum = 0;
        boolean got6 = false;

        for (int i = 0; i < nums.length; i++)
        {
            if (6 == nums[i])
            {
                got6 = true;
            }
            else if (got6 && 7 == nums[i])
            {
                got6 = false;
            }
            else if (!got6)
            {
                sum += nums[i];        
            }
        }

        return sum;
    }
}

你也可以这样做,

boolean flag = true, oneTimeDone = false;

  for(int i = 0; i < nums.length; i++){
      if(flag){
         if(nums[i] == 6 && !oneTimeDone){
                    flag = false;
         }else{  
           sum += nums[i];
         }  
     }else{
            if(nums[i] == 7){
                  oneTimeDone = true;
                  flag = true;
            }

     }
  }

更新输出:

我想你只是错过了一个布尔值

if(nums[i] != 6)

if(nums[i] != 6 && !six)
        int sum = 0;
        int countTill7 = 0;
        boolean six = false, seven=false;

        for(int i = 0; i < nums.length; i++){
            if(six==false && seven==false){
                if(nums[i]==6) six=true;
                else sum += nums[i];
            }else if(six==false || seven==false) {
                if(nums[i]==7) seven=true;
            }else {
                sum += nums[i];
            }
        }

        return sum;

不需要使用状态变量来指示我们是否处于“6 到 7”块中:

int sum = 0;
int i = 0;
while (i < nums.length) {
  // Sum up the numbers until we find a 6.
  while (i < nums.length && nums[i] != 6) {
    sum += nums[i];
    ++i;
  }
  if (i < nums.length) {
    // The i-th number is a 6.
    // Increase i until the (i-1)-th number is a 7,
    // since then i points to the next number we
    // should add from.
    do {
      ++i;
    } while (i <= nums.length && nums[i - 1] != 7);
  }
}