我有一个需要数字的数组。我的一种方法是计算数组中的正数。因此,如果他们输入2 3 4 5 6和0来终止程序。它应该输入打印出的Postive数字:5但是它打印出正数:4。它错过了最后一个数字。但是,如果我做2 3 4 5 -1 4 0 {0终止}它在这种情况下打印出正确的正数数字5.我已经完成了一些调试,但似乎无法弄明白。有什么帮助吗?
public static int countPositive(int[] numbers, int startIndex, int endIndex)
{
if (startIndex == endIndex)
{
if (numbers[startIndex] > 0)
{
return 1;
}
else
return 0;
}
else
{
if (numbers[startIndex] > 0)
{
return 1 + countPositive(numbers, startIndex +1, endIndex);
}
else
return countPositive(numbers, startIndex +1, endIndex);
}
}
答案 0 :(得分:0)
Goin粘贴所有代码,所以首先是整个代码:
public class JavaApplication5 {
public static int countPositive(int[] numbers, int startIndex, int endIndex)
{
if (startIndex == endIndex)
{
if (numbers[startIndex] > 0)
{
return 1;
}
else
return 0;
}
else
{
if (numbers[startIndex] > 0)
{
return 1 + countPositive(numbers, startIndex +1, endIndex);
}
else
return countPositive(numbers, startIndex +1, endIndex);
}
}
public static void main(String[] args) {
int i=countPositive(new int[] { -3, 30, 40, 55, 62}, 0, 4);
System.out.println(i);
}
}
这段代码给了我4 4个正数:30,40,55,62
您可以使用数组和strt和结束索引。
int i=countPositive(new int[] { -3, 30, 40, 55, 62,-3, 43}, 0, 6);
上面的代码为我提供了5个正数的数字。
int i=countPositive(new int[] { -3, 30, 40, 55, 62,-3, 43}, 3, 6);
还给我3个正数:从53,52,-3和43,他们是552和43。 再试一次。
答案 1 :(得分:0)
可怕的是,代码在2个不同的其他分支中具有相同的逻辑。更好:
if (startIndex > endIndex) return 0;
else
return
(numbers[startIndex] > 0 ? 1 : 0)
+ countPositives(numbers, startIndex+1, endIndex);
另外,要计算整个数组:
countPositives(numbers, 0, length.numbers-1);