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

С това първо ще се извърши операцията в скобите, която е събиране на две числа. Това е пряка демонстрация на двузначността на оператор “+” – ако той работи с числа, ще ги събере, а ако работи с текстови низове – ще ги конкатенира.

Leave a Reply

Your email address will not be published.