Java не знае как се събира?
Разгледайте следната заготовка на визуалната част на програма за събиране на две числа:
Кодът при натискане на бутона “calc” е следния:
private void calcButtonActionPerformed(java.awt.event.ActionEvent evt) { int n1 = Integer.parseInt(num1.getText()); int n2 = Integer.parseInt(num2.getText()); result.setText("" + n1 + n2); }
Защо при натискане на бутона “calc” се получава грешен резултат?
Този проблем и съответната задача, свързана с него, е класически и с него се сблъсква всеки начинаещ програмист, независимо дали неговият уводен курс е в среда с визуални контроли (както е показано в примера) или се работи чрез стандартен изход (System.out). В случая, като параметър на метод “setText” е подаден сложен израз, в който има както преобразуване на типове данни (int към String), така и конкатенация на текстови низове (чрез знака +). Задачата може да се използва като мотивировка за това да се поставят скоби, с което да се промени приоритета на операциите, т.е. в примера кодът да се промени по следния начин:
private void calcButtonActionPerformed(java.awt.event.ActionEvent evt) { int n1 = Integer.parseInt(num1.getText()); int n2 = Integer.parseInt(num2.getText()); result.setText("" + (n1 + n2)); }
С това първо ще се извърши операцията в скобите, която е събиране на две числа. Това е пряка демонстрация на двузначността на оператор “+” – ако той работи с числа, ще ги събере, а ако работи с текстови низове – ще ги конкатенира.
No comments yet