【问题标题】:output only if a number is repeating consecutively 3 times in java仅当数字在 java 中连续重复 3 次时才输出
【发布时间】:2023-01-19 04:27:25
【问题描述】:

考虑如图所示的数组

int[] nums = {1,1,1,2,2,3,3,3,4,4,4,4,5,5,5,1,1,2,2,2}. 

输出连续重复 n 次的数字。例如,如果我们需要输出一个连续重复 3 次的数字,那么输出必须是 1,3 和 5。4 不应被视为连续重复 4 次 4 次。

请让我知道如何使用传统和 Java 8 流方式在 Java 中实现这一点。

尝试了类似下面的内容,但它忽略了最后三个元素。如果我不给它,它就会越界。

for(int i=0; i<nums.length-3; i++){
    if(nums[i] == nums[i+1] && nums[i+1] == nums[i+2] && nums[i+2] != nums[i+3]){
        System.out.println(nums[i]);
        continue;
    }
}

【问题讨论】:

  • 只需保留连续字符数的总计 n,如果计数等于 n,则打印当前字符,如果遇到 n 或字符发生变化,则将计数器归零。不需要多个数组索引。
  • 现在的问题是你总是检查下一个组后的元素,但最后一组 {....,2,2,2} 后面没有元素。因此,循环提前终止;条件应该运行到i &lt; nums.length - 2,但随后我们得到一个IndexOutOfBoundException。这意味着当且仅当i &lt; nums.length - 3时,我们才应该检查nums[i+2] != nums[i+3]

标签: java logic


【解决方案1】:

你需要检查是否有相同的数字ii+1i+2 组:

for(int i=0; i<nums.length-3; i++){
    if((i == 0 || nums[i] != nums[i - 1])&& nums[i] == nums[i+1] && nums[i+1] == nums[i+2] && nums[i+2] != nums[i+3]){
        System.out.println(nums[i]);
        continue;
    }
}

【讨论】:

  • 因为我们首先检查 i = 0,所以它应该可以工作
  • 是的,刚看到
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-07
  • 1970-01-01
  • 1970-01-01
  • 2015-10-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多