Чтобы избежать этой проблемы, используйте nextLine();
сразу после nextInt();
, поскольку это помогает очистить буфер. Когда вы нажимаете ENTER
, nextInt();
не захватывает новую строку и, следовательно, позже пропускает код Scanner
.
Scanner scanner = new Scanner(System.in);
int option = scanner.nextInt();
scanner.nextLine(); //clearing the buffer
value
в input
всегда является строкой, поэтому +
заканчивается конкатенацией строк ("10" + "10"
is "1010"
, в отличие от 10 + 10
, который является 20
).
Если вы используете input type="number"
(OP нет, но другие могут найти этот ответ), и браузер поддерживает их, вы можете использовать valueAsNumber
:
var onerepmax = document.wodCalculate.oneRepMax.valueAsNumber;
Если вы используете type="text"
или браузер не поддерживает valueAsNumber
:
Вы можете преобразовать пользовательские значения ввода с помощью parseInt(value, 10)
(10 = decimal, base 10), если они предназначены для целых чисел, например:
var onerepmax = parseInt(document.wodCalculate.oneRepMax.value, 10);
Это всего лишь один вариант, однако у вас есть несколько:
+
: value = +value
будет принуждать строку к числу, используя для этого стандартные правила JavaScript. Число может иметь дробную часть (например, +"1.50"
- 1.5
). Результат нечетности строки (кроме e
для научной нотации) дает результат NaN
. Кроме того, +""
- 0
, что может быть неинтуитивным. var onerepmax = +document.wodCalculate.oneRepMax.value;
Number
: value = Number(value)
. Делает то же, что и +
. var onerepmax = Number(document.wodCalculate.oneRepMax.value);
parseInt
, обычно с основанием (номер базы): value = parseInt(value, 10)
. Недостатком здесь является то, что parseInt
преобразует любое число, которое он находит в начале строки, но затем игнорирует нецифровые символы в строке, поэтому parseInt("100asdf", 10)
- 100
, а не NaN
. Как следует из названия, parseInt
анализирует только целое число. // (Same as the first one above)
var onerepmax = parseInt(document.wodCalculate.oneRepMax.value, 10);
parseFloat
: value = parseFloat(value)
. Позволяет дробные значения и всегда работает в десятичном (никогда не восьмеричном или шестнадцатеричном). То же самое делает parseInt
с мусором в конце строки, parseFloat("123.34alksdjf")
- 123.34
. var onerepmax = parseFloat(document.wodCalculate.oneRepMax.value);
Итак, выберите свой инструмент в соответствии с вашим прецедентом. : -)
Проблема в том, что вы добавляете строку, а не число. Оператор +
в JavaScript имеет множественную семантику, и как только один операнд является строкой, он будет выполнять конкатенацию строк.
Чтобы предотвратить это, преобразуйте строку в число с унарным +
оператор.