java - 在未排序的数组中查找 4 个连续相同值的整数 - Java
问题描述
我环顾四周,但由于某种原因找不到在 java 中完成此操作的人。我需要编写一段代码,它接受一个单间隔整数数组,并确定其中是否有四个连续的、相同值的整数。(我以前用其他语言编写过代码,但我正在尝试学习 Java,所以我无法让它工作的事实让我发疯了。)我在下面包含了我迄今为止编写的代码。
public static boolean isConsecutiveFour(int[] checkArray) {
for (int i = 1; i < checkArray[0]-1; i++){
int lower2 = [checkArray[i-2] intValue];
int lower1 = [checkArray[i-1] intValue];
int mid = [checkArray[i] intValue];
int upper1 = [checkArray[i+1] intValue];
int upper2 = [checkArray[i+2] intValue];
if ((lower2 == lower1 && lower1 == mid && mid == upper1)
||
(lower1 == mid && mid == upper1 && upper1 == upper2)) {
return true;
}
}
return false;
}
解决方案
你的代码出了什么问题?
另一个答案向您展示了一种直接从用户输入中获取结果的快速而智能的方法。我会看看你的代码并修复错误。
您在这里遇到了语法问题:
int lower2 = [checkArray[i-2] intValue];
外面的方括号和单词intValue
不属于这里。假设您已经将用户输入放入一个整数数组中(如参数声明所述int[] checkArray
),您可以这样做:
int lower2 = checkArray[i - 2];
其他任务类似。
接下来你有一些边界条件问题。第一次通过您的循环i
是 1,因此checkArray[i-2]
尝试取出索引 -1 处的元素。数组索引从 0 开始,所以这会引发异常。而是从int i = 2
. 索引最多比数组长度小一。您从checkArray.length
. 既然你想做checkArray[i+2]
,你就需要那个i < checkArray.length - 2
,所以让它成为你在for
循环中的条件。
不,等等。您的第三个问题不是错误,只是逻辑过于复杂:您将五个连续的整数取出到lower2
、lower1
、mid
和。你只需要四个。所以不要让事情比需要的更复杂 delete 。现在你只需要,所以你可以而且必须允许。现在您只需要条件的前半部分,这使得语句更易于阅读和理解。upper1
upper2
upper2
checkArray[i + 1]
i < checkArray.length - 1
if
if
而已。
推荐阅读
- c# - 减少 C# 中的 Foreach 循环
- javascript - React native 需要一个字符串(用于内置组件)或一个类/函数(用于复合组件),但得到:object
- javascript - highcharts 列的表单数据系列
- visual-studio-code - 如何设置键盘映射以在 Visual Studio Code 中运行代码?
- php - 将 Symfony 项目部署到产品服务器时出现问题
- javascript - 支持“快速排序”算法
- python-3.x - 在两个不同的字符串中查找重复的字母
- python - 导入 pygmsh 模块后,Python 子进程会丢失我的 PATH 中的内容吗?
- php - Woocommerce:从插件中获取一些自定义购物车项目数据值
- c# - 将 Sqlite 数据库保存到文件