-4

したがって、質問は次のように述べています。配列内の数値の合計を返します。ただし、6 で始まり、次の 7 まで続く数値のセクションを無視します (すべての 6 の後に少なくとも 1 つの 7 が続きます)。数値がない場合は 0 を返します。例えば:

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;
  for(int i=0;i<nums.length;i++){
    if(nums[i] == 6){
      while(nums[i] == 7){
        i++;
      }
    }
    else{
      sum = sum + nums[i];
    }
  }
  return sum;
}
4

3 に答える 3

1

ヒントをあげます。以下は正しくありません。

  while(nums[i] == 7){
于 2013-04-04T10:14:54.357 に答える
1

このループは決して実行されませんn[i]

while(nums[i] == 7){
    i++;
}

そのはず

while(nums[i] != 7){
    i++;
}

その内側のループを回避し、次のように単一のループで問題を解決する方法があります。

boolean seenSix = false;
for(int i=0;i<nums.length;i++){
    if (!seenSix) {
        if(nums[i] != 6) {
            sum[i] += n[i];
        } else {
            seenSix = true;
        }
    } else {
        seenSix = (n[i] != 7);
    }
}
于 2013-04-04T10:14:59.170 に答える
1

試す

while(nums[i] != 7){
    i++;
}
于 2013-04-04T10:15:10.093 に答える