Основы программирования с Java - стр. 32
Вы можете увидеть окно локальных переменных и изучить их значения.
Вы можете видеть, что значения весов определены при инициализации, и examScore, labScore и hwScore, все получили значение 100,0.
Вы можете продолжить выполнение программы, нажав на кнопку 'step', которая будет выполнять следующую инструкцию в программе.
Есть и другие кнопки здесь и лучший способ узнать, что они делают, это попробовать их самостоятельно.
Давайте просто использовать кнопку step на данный момент.
Вы можете видеть, что следующее утверждение подсвечено в окне редактора.
Это означает, что программа только что закончила выполнение инструкции для вычисления examScore.
Если изучить значения переменных снова, вы найдете, что все остальные значения остаются такими же, за исключением того, что для examScore теперь дается значение 0.0.
Поэтому здесь должна быть некоторая проблема с выполнением этого выражения.
Давайте продолжим выполнение чтобы увидеть, если у нас аналогичная проблема с вычислением и других показателей.
Опять же, мы получаем 0 для labScore а затем 0 для hwScore, так что должны быть некоторые общие проблемы с расчетом и обновлением оценок, использующих эти выражения присваивания.
Можете ли вы найти эту проблему? Намек, что это связано с делением целых, которое я обсуждал ранее.
Обратите внимание, что вес экзаменов со значением 70 имеет тип int. Когда он делится на 100, что также является целым числом, результат деления 0,7 будет урезан и возвращает 0 в результате.
Далее 0 умножается на examScore, результирующее значение равно 0, который затем присваивается examScore.
Та же проблема возникает в labScore и hwScore.
И эту проблему легко исправить. Для этого нужно заменить 100 на 100,0, и, если вы помните правило преобразования типов, которое мы только что обсудили, когда целое делится на число с плавающей точкой, результат будет преобразован в число с плавающей точкой.
Давайте теперь прекратим предыдущее выполнение программы и скомпилируем программу снова.
Теперь также нет ошибки синтаксиса.
В предыдущем выполнении программы было показано, что, хотя программа не имеет синтаксических ошибок, это не означает, что она будет работать так как надо, или семантически правильно.
Давайте попробуем выполнить программу, нажав кнопку Run.
Если ввести те же баллы 100, 100 и 100, вычисляется окончательная оценка 100 и все сейчас должны быть счастливы.
Вопросы
Задача
Каким вы думаете будет значение переменной result после выполнения следующего сегмента Java кода?
int i = 1234567890;
float f = i;
int result = i – (int)f;