gpt4 book ai didi

java - 计数元素

转载 作者:太空宇宙 更新时间:2023-11-04 11:34:38 24 4
gpt4 key购买 nike

我试图使用递归来计算某个元素的出现次数,但我不断收到数组越界错误。

public static void main(String[] args) {
int[] a ={70,70,86,53};
int number = 70;
int done = occur(number, a);
System.out.println(done);
}

public static int occur(int number, int[] a, int count) {
int length = a.length;
int count = 0;
if (a[0] != number) {
count += 0;
} else {
if (a[0] == number) {
count += 1;
}
}
if (length == 0) {
return count;
}
int[] a2 = Arrays.copyOfRange(a, 0, a.length - 1);
return occur(number, a2, count);
}

}

最佳答案

您有两个逻辑错误。

1) 递归方法中需要 3 个参数:要搜索的数字、搜索的实际计数和搜索的实际数组。
您没有为实际计数指定任何参数。因此该信息将在下一次递归调用中丢失。

2) 比较数组的第一个元素,以检查其值是否与要搜索的数字匹配:

if (a[0] == number) {
count += 1;
}

但是您在下一个递归调用的发送参数中删除了数组的最后一个元素:

int[] a2 = Arrays.copyOfRange(a, 0, a.length - 1);
return occur(number, a2);

它会产生不准确的结果。

<小时/>

作为旁注:

  • 您有一个不需要的处理。这样做有什么意义:

    if (a[0] != 数字) {
    计数 += 0;
    }

它不会增加计数器。所以,没啥用

  • 可以通过添加一个参数来避免数组复制,该参数在每次调用时传输要处理的当前索引。
<小时/>

这是一个带有更正的示例代码:

public static void main(String[] args) {
int[] a = { 70, 70, 86, 53 };
int number = 70;
int done = occur(number, 0, a, 0);
System.out.println(done);
}

public static int occur(int number, int count, int[] a, int index) {

if (index == a.length) {
return count;
}

else if (a[index] == number) {
count += 1;
}

return occur(number, count, a, ++index);
}

关于java - 计数元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43418895/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com