如何计算数组整数和数组索引属于一个区间在Java中?



我试图计算数组的整数的和,其索引属于区间[n1;n2)

n1,n2Are int &0 <= n1 <= n2

int[] array = new int[] {0, 1, 2, 3, 4, 5, 3}; 
int zeroToOne = calc(array,0, 1); // Should return 1
int zeroToFive = calc(array,0, 5); // Should return 15
int doubleZero = calc(array,0, 0); // Should return 0
int zeroToSix = calc(array, 0,6); // Should return 18

所以我尝试了三种方法

第一个方法:

public static int calc(int[] array, int n1, int n2) {
int sum = 0;
for (int i = 0; i < array.length; i++){
if (i <= n2 && n1 <= i) {
sum += i;
}
}
return sum;
}

}

我:

1 15 0 21

第二种方法:

public static int calc(int[] array, int n1, int n2) {
int sum = 0;
for (int a: array){
if (n1 <= a && a <= n2){
sum += a;
}
}
return sum;
}

我:

1 18 0 18

第三方法:

public static int calc(int[] array, int n1, int n2) {

return Arrays.stream(array, n1, n2).sum();
}

我得到:

0 10 0 15

我该如何解决这个问题?

对你的第一个函数做一个小小的改变,它应该可以工作了:

public static int calc(int[] array, int n1, int n2) {
int sum = 0;
for (int i = n1; i <= n2; i++) {
sum += array[i];
}
return sum;
}

注意,我们从位置n1到n2遍历元素,并对它们求和。

您调用的方法:

Arrays.stream(array, n1, n2)

在文档中有如下定义:

stream(int[] array, int startInclusive, int endExclusive)

所以你可以看到第三个参数是排他的

你能做的就是用last index + 1调用它。这应该没问题:

return Arrays.stream(array, n1, n2+1).sum();

改变第一个方法为:

public static int calc(int[] array, int n1, int n2) {
int sum = 0;
for (int i = 0; i < array.length; i++){
if (array[i] <= n2 && n1 <= array[i]) {
sum += array[i];
}
}
return sum;
}

如果你想n1 &n2为int&0 <= n1 <= n2<array.length>
你最好检查n1和n2的值然后如果条件为false做一些类似throw a exception

的事情for do this

public static int calc(int[] array, int n1, int n2) {
if(!(n1>=0 && n1<=n2 && n1<=array.length && n2<=array.length)){
// do something like throw a exception
}
int sum = 0;
for (int i = 0; i < array.length; i++){
if (array[i] <= n2 && n1 <= array[i]) {
sum += array[i];
}
}
return sum;
}

我有一些建议!

这在PHP中为我工作,我试着把它翻译成JAVA。

public static int calc(int[] array, int n1, int n2) {
if(!(n1>=0 && n1<=n2 && n1<=array.length && n2<=array.length)){
// Throw a exception here or return something
}
int sum = 0;
for (int i = 0; i < array.length; i++){
if (i >= n1 && i <= n2) {
sum += array[i];
}
}
return sum;
}

我从下面的PHP代码翻译过来。

function calc($array, $n1, $n2)
{
if (!($n1 >= 0 && $n1 <= $n2 && $n1 <= count($array) && $n2 <=     count($array))) {
throw new Exception('Invalid params.');
}
$sum = 0;
for ($i = 0; $i < count($array); $i++) {
if ($i >= $n1 && $i <= $n2) {
$sum += $array[$i];
}
}
return $sum;
}
//Example
$array = [0, 1, 2, 3, 4, 5, 3];
echo calc($array, 0, 1); // 1
echo calc($array, 0, 5); // 15
var sum = 0
for (index , item) in array.enumerated() {
if n1 <= index && index <= n2{
print("index: (index)")
sum += item
}
}
return sum