У меня есть внутренний класс в калькуляторе с рабочими кнопками.У меня есть JTextArea
, при котором нажатие кнопок зарегистрирует номер 1-9, а затем напечатает новую строку после выбора операции.После выбора операции у меня есть логическое значение, которое проверяет, нужно ли вычислять результат перед повторной печатью.Я попытался разделить каждое число и сохранить его, используя:
String s = textArea.getText();
String[] parts = s.split("\n|\\=|\\-|\\/|\\*|\\+");
Пока я ожидаю что-то вроде
100+
100=
200+
Вместо этого я сталкиваюсь с:
100+
100=
java.lang.NumberFormatException: empty String
Для выполнения этих расчетов я использовал следующий фрагмент кода:
if(s.length() > 0){
if(calc == true){
textArea.setText(textArea.getText() + "=" + "\n");
d2 = Double.parseDouble(parts[counter]);
result = d1 + d2;
textArea.setText(textArea.getText() + result + buttonText + "\n");
d1 = d2;
}
if(Character.isDigit(s.charAt(s.length()-1)) && calc == false){
textArea.setText(textArea.getText() + buttonText + "\n");
d1 = Double.parseDouble(parts[counter]);
counter++;
calc = true;
}
}
Есть ли способ сохранить числа, которые будут использоваться после каждого ввода, без появления этой ошибки?
edit: ошибка возникает со строкой
Double.parseDouble(parts[counter]);
, при удалении она не вызывает ошибок, но все равно печатает нормально.Что я заметил во время тестирования с Double.parseDouble (parts [0]);это сработало бы и вернуло первый ввод строки с кнопок, но, похоже, что после этого в массиве
String[] parts = s.split("\n|\\=|\\-|\\/|\\*|\\+");
больше не сохраняется значение, оно, похоже, останавливается там, несмотря на то, что дополнительные входы выполняютТребования к разделителю.Мне интересно, связано ли это с тем, что метод split не добавляет дополнительные входные данные в массив.
По запросу я также выложил полный код здесь, где это необходимо
class operands implements ActionListener
{
public void actionPerformed(ActionEvent event)
{
Object obj = event.getSource();
JButton but = null;
String buttonText = "";
//casts button with object
if(obj instanceof JButton)
{
but = (JButton) obj;
}
//sets string of text to button text
if(but != null)
{
buttonText = but.getText();
}
String s = textArea.getText();
//store numbers after each operand
String[] parts = s.split("\n|\\=|\\-|\\/|\\*|\\+");
if(s.length() > 0)
{
if(calc)
{
//performs calculation and returns result
textArea.setText(textArea.getText() + "=" + "\n");
d2 = Double.parseDouble(parts[counter]);
result = d1 + d2;
textArea.setText(textArea.getText() + result + buttonText + "\n");
d1 = d2;
}
if(Character.isDigit(s.charAt(s.length()-1)) && !calc)
{
//updates function to perform calculation on next operand
textArea.setText(textArea.getText() + buttonText + "\n");
d1 = Double.parseDouble(parts[counter]);
counter++;
calc = true;
}
}
}