Назначить номер ввода числовой переменной? [Дубликат]

Чтобы избежать этой проблемы, используйте nextLine(); сразу после nextInt();, поскольку это помогает очистить буфер. Когда вы нажимаете ENTER, nextInt(); не захватывает новую строку и, следовательно, позже пропускает код Scanner.

Scanner scanner =  new Scanner(System.in);
int option = scanner.nextInt();
scanner.nextLine(); //clearing the buffer
1
задан tvs 5 October 2015 в 09:58
поделиться

2 ответа

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);
    

Итак, выберите свой инструмент в соответствии с вашим прецедентом. : -)

2
ответ дан T.J. Crowder 4 September 2018 в 07:11
поделиться

Проблема в том, что вы добавляете строку, а не число. Оператор + в JavaScript имеет множественную семантику, и как только один операнд является строкой, он будет выполнять конкатенацию строк.

Чтобы предотвратить это, преобразуйте строку в число с унарным + оператор.

1
ответ дан Touffy 4 September 2018 в 07:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: