java - 检查数组是否包含具有递归和某些限制的 int
问题描述
我遇到了以下问题:创建一个递归方法来检查给定数组是否包含给定值。这应该通过将数组分成两半来完成,因此需要两次递归调用。
对我来说问题是方法头不包含任何指定的索引范围,可以通过递归进行更改,以便搜索数组中的每个值。我现在尝试将与值进行比较的索引修复为 0,并继续将数组分成两半,以便数组中的每个值在某个时候都具有索引 0。但是它不起作用,我不明白为什么。如果有人能给我一个关于我做错了什么的线索,那将很有帮助,因为我对 java 还是很陌生。
我的限制如下:不改变方法头,没有全局变量,没有循环,只允许类是:字符串、数组、数学、整数。
例子:
int[] array = {2, 4, 7, 10, -10, 4, 0, 0, 27, 11, 4, 6};
System.out.println(containsValue(array4, 11));
这应该是真的,但在我的代码中它是错误的。
代码:
private static boolean containsValue(int[] workArray, int value) {
int count = 0;
boolean hasValue;
if (workArray.length > 1) {
int[] firstHalfArray = Arrays.copyOfRange(workArray, 0, (workArray.length / 2) - 1);
if (firstHalfArray[count] == value) {
hasValue = true;
return containsValue(firstHalfArray, value) || hasValue;
}
}
if (workArray.length > 1) {
int[] secondHalfArray = Arrays.copyOfRange(workArray, 6, workArray.length - 1);
if (secondHalfArray[count] == value) {
hasValue = true;
return containsValue(secondHalfArray, value) || hasValue;
}
}
return false;
}
public static void main(String[] args) {
int[] array4 = {2, 4, 7, 10, -10, 4, 0, 0, 27, 11, 4, 6};
System.out.println(containsValue(array4, 11));
System.out.println(containsValue(array4, 2));
System.out.println(containsValue(array4, 25));
System.out.println(containsValue(array4, 0));
System.out.println(containsValue(array4, 14));
System.out.println(containsValue(array4, 6));
}
提前致谢
更新:我已经调整并调整了我的代码。我的基本情况非常错误,谢谢。它的其余部分仍然没有按照我想要的方式工作,即使对于我来说递归是正确实现的(我仍然继续将它分成两半,直到达到基本情况(workArray.lenght == 1)并检查是否数组中的那个单个 int 等于 value。我还做错了什么?
private static boolean containsValue(int[] workArray, int value) {
int count = 0;
if (workArray.length > 1) {
int[] firstHalfArray = Arrays.copyOfRange(workArray, 0, (workArray.length / 2));
return containsValue(firstHalfArray, value);
}
if (workArray.length > 1) {
int[] secondHalfArray = Arrays.copyOfRange(workArray, workArray/2, workArray.length - 1);
return containsValue(secondHalfArray, value);
}
if (workArray[count] == value) {
return true;
}
return false;
解决方案
我不明白
- 为什么你需要这个递归
- 为什么要复制数组子集...最好在方法参数中保留搜索范围 containsValue(int[] workArray, int value, int startindex, int endidex)
copyOfRange 中的最后一个属性是结束索引,但排他性
private static boolean containsValue(int[] workArray, int value) { if (workArray.length == 0) return false; if (workArray[0] == value) return true; if (workArray.length == 1) return false; int middle = workArray.length / 2; int[] firstHalfArray = Arrays.copyOfRange(workArray, 0, middle); if(containsValue(firstHalfArray, value)) return true; int[] secondHalfArray = Arrays.copyOfRange(workArray, middle, workArray.length); return containsValue(secondHalfArray, value); }
推荐阅读
- scala - 如何将jar添加到sbt
- sql - POSTGRES - 丢弃外部数据包装器/模式的风险
- ruby-on-rails - Rails 5:find_or_create_by 不保存所有参数
- php - HTML 错误未显示
- mysql - MySQL db 中的 WP_Options 表超过 1.1GB - 如何减小大小?
- dart - 尝试从列表中删除对象时在迭代期间进行并发修改
- node.js - 使用 nodeJS + Express 重定向域
- unity3d - CS0120 发生(功能)统一
- javascript - 根据对象本身的布尔值添加或避免在对象中添加属性
- c# - 如何连接列表
使用数据网格