Я пытаюсь получить sumSection
чтобы суммировать элемент, который звонит бегун, но я не уверен, как это сделать?
package com.company;
public class processser
{
//instance variables and constructors could be present, but are not necessary
//sumSection will return the sum of the numbers
//from start to stop, not including stop
public static int sumSection(int[] numArray, int start, int stop)
{
int sum = 0;
{
for (int i : numArray)
sum += i;
}
return sum ;
}
//countVal will return a count of how many times val is present in numArray
public static int countVal(int[] numArray, int val)
{
int count = 0;
for (int item : numArray)
{
if (item == val)
{
count = count + 1;
}
}
return count;
}
}
Вот бегун:
package com.company;
import static java.lang.System.*;
import java.lang.Math;
import java.util.Arrays;
public class Main
{
public static void main(String args[])
{
int[] theRay = {2,4,6,8,10,12,8,16,8,20,8,4,6,2,2};
out.println("Original array : "+ Arrays.toString(theRay));
out.println("Sum of 0-3: " + processser.sumSection(theRay, 0, 3));
}
}
Я пытаюсь получить сумму позиций в моем массиве 0-3. Я пробовал все, что знаю в java, но не понимаю, как получить сумму 0-3 в массиве, используя sumSection
Вы можете использовать потоки Java 8:
static int sumSection(int[] numArray, int start, int stop) {
return IntStream.range(start, stop).map(i -> numArray[i]).sum();
}
Это происходит от start
до stop
(эксклюзивно), поэтому, если у вас есть:
int[] theRay = {2,4,6,8,10,12,8,16,8,20,8,4,6,2,2};
sumSection(theRay, 0, 3);
Это будет примерно так:
IntStream.range(0, 3) -> [0, 1, 2]
[0, 1, 2].map(i -> numArray[i]) -> [2, 4, 6]
[2, 4, 6].sum() -> 12
Просто убедитесь, что start < stop
и stop <= numArray.length
и у вас не должно быть проблем.
Math.min(stop, numArray.length)
в .range()
чтобы избежать необходимости проверять этот stop <= numArray.length
.
for (int i = start; (i < numArray.length) && (i <= stop); i++) {
sum += numArray[i];
}
i<=array.length
потенциально является ArrayOutOfBoundsException
Вам нужен другой тип цикла, а не:
for (int i : numArray)
Лучшим подходом было бы:
int sum = 0;
if(stop <= array.length && start < stop) {
for(int i = start; i < stop; i++) {
sum += array[i];
}
}
List
s вместо массивов, вы можете просто вызватьList.subList()
чтобы получить представлениеList
содержащее только те элементы, которые вы хотите суммировать.