Как получить код для двойных значений (x * 2) меньше 10 в массиве? (Ява)

58
5

Я беру онлайн-класс программирования Java (я новичок), и я не могу понять, как правильно закончить код. Я уже написал то, что, как я думаю, должен быть включен, однако мне не хватает чего-то, что сделает код полностью.

Направления: удвоить любое значение элемента, которое меньше minVal. Пример: если minVal = 10, то dataPoints = {2, 12, 9, 20} становятся {4, 12, 18, 20}.

public class StudentScores {
public static void main (String [] args) {
final int NUM_POINTS = 4;
int[] dataPoints = new int[NUM_POINTS];
int minVal = 0;
int i = 0;

dataPoints[0] = 2;
dataPoints[1] = 12;
dataPoints[2] = 9;
dataPoints[3] = 20;

minVal = 10;
// DO NOT EDIT ANYTHING ABOVE THIS COMMENT. ABOVE IS THE DEFAULT CODE OF ASSIGNMENT

for (i = 0; dataPoints[i] < minVal; ++i) {
dataPoints[i] = dataPoints[i] * 2;
}

// DO NOT EDIT ANYTHING BELOW THIS COMMENT. BELOW IS DEFAULT CODE OF ASSIGNMENT
for (i = 0; i < NUM_POINTS; ++i) {
System.out.print(dataPoints[i] + " ");
}
System.out.println();

return;
}
}

Я сделал комментарии о том, с чем не следует общаться, поскольку я использую интерактивную интерактивную книгу и не могу редактировать или изменять код по умолчанию. Кроме того, мы работаем с массивами в этой главе.

Я новичок в этом сайте в том смысле, что не знаю неписанных способов stackoverflow, но я неоднократно просматривал его в Интернете, чтобы узнать, как удвоить значения для массива в java, но я не получаю результаты поиска Мне нужно помочь.

Сообщения об ошибках, которые я получаю:

Testing minVal = 10 and dataPoints = {2, 12, 9, 20}
Expected output: 4 12 18 20
Your output: 4 12 9 20

Я думал, что компилятор должен иметь возможность полностью прочитать строки, чтобы зарегистрировать, что 9 также меньше 10 и, следовательно, должно быть удвоено до 18, но это не так. Что мне не хватает, чтобы прочитать 9?

спросил(а) 2016-09-27T11:12:00+03:00 4 года, 2 месяца назад
1
Решение
82

В вашем коде 12 <10 оценивается как ложное, и поэтому он выходит из цикла и, следовательно, дает неправильный вывод. Проверьте приведенный ниже код:

 for (i = 0; dataPoints[i] < NUM_POINTS ; ++i) {
if(dataPoints[i] < minVal) {
dataPoints[i] = dataPoints[i] * 2;
}
}

Я зацикливал все элементы массива, и если элемент <minVal, я умножил его на 2.

ответил(а) 2016-09-27T11:13:00+03:00 4 года, 2 месяца назад
59

Второй раздел оператора for - это условие завершения: после того, как он оценит значение false, ваш цикл прекратит выполнение.

В этой конкретной проблеме вы пытаетесь просмотреть каждое значение в вашем массиве dataPoints и удвоить его. Это требует использования индексной переменной.

Ваша индексная переменная будет отслеживать вашу позицию в массиве при перемещении слева направо. Начиная слева, с индексом 0, вы будете двигаться вправо, пока не окажетесь в конце массива.

++i заботится об увеличении вашей индексной переменной каждый раз, когда цикл работает. Это то, что перемещает вас через массив.

Условие завершения должно проверить, просмотрели ли вы все значения в массиве. После того, как вы прошли все значения в вашем массиве, ваша индексная переменная целиком указывается в конце. И помните, как только условие завершения будет false ваш цикл прекратит выполнение. Поэтому вы хотите запустить свой код, в то время как i (ваша индексная переменная) меньше размера массива (dataPoints.length).

После того, как вы выяснили границы цикла for, просто проверьте свой условный оператор if-then перед обновлением значений:

for (i = 0; i < dataPoints.length; ++i) {
if (dataPoints[i] < minVal) {
dataPoints[i] = dataPoints[i] * 2;
}
}

ответил(а) 2016-09-27T11:26:00+03:00 4 года, 2 месяца назад
43

for (i = 0; i < NUM_POINTS; ++i) {
if (dataPoints[i] < minVal) {
dataPoints[i] = (dataPoints[i] * 2);
}
}

ответил(а) 2017-03-13T07:22:00+03:00 3 года, 8 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема