Передача и обновление массива оценок путем увеличения с заданным процентом

public class ScoreCard {

private double[] scores;
/**
 * 
 * @param val
 * @param low
 * @param high
 * @return low if val < low, 
 * high if val > high, 
 * val if val is between low and high
 */
private double constrain(double val, int low, int high) {
    if (val < low)
        return low;
    if (val > high)
        return high;
    return val;
    }

.
.
.
.

/**
 * update each score so it increases by given percentage. For example,
 * if score = {60.0, 90.0} before the method is called, it should
 * become {72.0, 100.0} after the method is called with parameter 20.
 * Note: 90.0 increased by 20% is 108, but scores should be constrained between
 * 0 and 100. So, 100.
 * @param percentage
 */

public void scale(double percentage) {
    for (int i = 0; i < scores.length; i++) {
        percentage = scores[i] / 100.0 * percentage;
        scores[i] += constrain(percentage, 0, 100);
        }
    }

Я снова застрял на небольшом куске кода для проекта. Я не выполняю тесты JUnit, когда пытаюсь пройти эту функцию. Кажется, что он корректно обновляет массив с заданным процентом (10%), но вместо того, чтобы каждый элемент обновлялся на заданный процент, кажется, что он делит процент между элементами внутри массива, давая мне некрасивые числа.

Любая помощь будет очень ценится!

2 ответа

Решение

Почему вы меняете значение процента в цикле? Я бы сделал что-то вроде этого:

for (int i = 0; i < scores.length; i++) {
    scores[i] = constrain(scores[i]*(1+percentage/100), 0, 100);
}
public void scale(double percentage) {
    for (int i = 0; i < scores.length; i++) {
        percentage = scores[i] / 100.0 * percentage;

        scores[i] =(scores[i]+percentage)>=100?100:(scores[i]+percentage);
        }

    }
Другие вопросы по тегам