Member 12943823 Ответов: 3

Как исправить эту программу


Проблема, с которой я сталкиваюсь, заключается в том, что цикл булевой переменной заморозит программу и она не распечатает строковую переменную er. Примечание это использование окна графического интерфейса для размещения текстового поля в

Вот код

number = textField.getText();
					do{
					try{
					actualN = Integer.parseInt(number);
					loop = false;
					}catch(NumberFormatException g){
						
						textField_1.setText(er);
						
						loop = true;
						g.printStackTrace();
					}
					}while(loop == true);
					answer = Integer.toBinaryString(actualN);
					textField_1.setText(answer);


Что я уже пробовал:

Я попробовал несколько вещей, но ничего не сработало

3 Ответов

Рейтинг:
2

Wendelius

Если я правильно смотрю: если ввод в текстовое поле недопустим и не может быть разобран на целое число, вы переходите к блоку catch. В блоке catch вы устанавливаете loop в true, что приводит к тому, что цикл переходит ко второму раунду и повторяет одно и то же преобразование снова, снова и снова.

Я думаю, вопрос в том, почему вы пытаетесь выполнить целочисленное преобразование внутри цикла? Если это не удается, покажите ошибку, если это удается, покажите результат. Но для чего нужна петля?


Рейтинг:
2

DualcoreMax

в вашем коде между блоками catch вы устанавливаете loop=true, поэтому при наличии исключения числового формата код будет зацикливать исключение навсегда(бесконечный цикл).
Основная идея, которую я могу получить из вашего кода, заключается в том, что вы собираетесь преобразовать текст в текстовом поле в двоичный файл, и если есть исключение, вы покажете сообщение об ошибке.

Нет необходимости использовать делать, пока для этой цели. потому что

toBinaryString(str)
преобразует весь текст в str для бинарных.

но с вашим подходом попробуйте использовать следующий код

do {
           try {
               actualN = Integer.parseInt(number);
               loop = false;
               answer = Integer.toBinaryString(actualN);
               //set the answer
           } catch (NumberFormatException g) {
               loop = false;
               g.printStackTrace();
               answer=er;
               //set the error
           }
       } while (loop);

       jTextField_1.setText(answer);



или без делать пока

try {
            actualN = Integer.parseInt(number);
            answer = Integer.toBinaryString(actualN);
        } catch (NumberFormatException g) {
            g.printStackTrace();
            answer = er;
        }
        jTextField_1.setText(answer);


Надеюсь, это вам поможет...


Рейтинг:
2

Patrice T

Используйте отладчик, чтобы увидеть, что делает ваш код. Он позволяет выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Отладчик-Википедия, свободная энциклопедия[^]
Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]

Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.