我试图计算数组的整数的和,其索引属于区间[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