Не сохраняется ожидаемая строка из JTextArea после обновления ввода - PullRequest
0 голосов
/ 20 ноября 2018

У меня есть внутренний класс в калькуляторе с рабочими кнопками.У меня есть 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;
                }
            }
        }

1 Ответ

0 голосов
/ 20 ноября 2018

спасибо всем, кто пытался помочь.Я обнаружил проблему.

Для функции string .split () у меня был "\ n" в качестве одного из разделителей.Похоже, что при сохранении числа в строку возникла проблема, в результате чего в массиве был бы пустой результат.Удаление новой строки из разделителя, похоже, решило проблему.

...