Метод проверки, пуста ли метка, не работает

Я работаю над программой, которая использует jLabels, и мне нужно проверить, пуста ли метка или нет. Если он пуст, он должен просто выдать сообщение о том, что он пуст, и ничего больше, но на самом деле он выдает много ошибок. Я использую label.getText().isEmpty().
Вот код:

if(Integer.parseInt(najboljsi1.getText())<1||Integer.parseInt(najboljsi1.getText())>17||najboljsi1.getText().isEmpty()||
       Integer.parseInt(najboljsi2.getText())<1||Integer.parseInt(najboljsi2.getText())>17||najboljsi2.getText().isEmpty()||
       Integer.parseInt(najboljsi3.getText())<1||Integer.parseInt(najboljsi3.getText())>17||najboljsi3.getText().isEmpty()||
       Integer.parseInt(najslabsi1.getText())<1||Integer.parseInt(najslabsi1.getText())>17||najslabsi1.getText().isEmpty()||
       Integer.parseInt(najslabsi2.getText())<1||Integer.parseInt(najboljsi2.getText())>17||najslabsi2.getText().isEmpty()||
       Integer.parseInt(najslabsi3.getText())<1||Integer.parseInt(najslabsi3.getText())>17||najslabsi3.getText().isEmpty())
    {
        jLabel101.setForeground(Color.red);
        jLabel101.setText("Eno ali več vnesenih števil ni v pravilnem obsegu (1-16)!");
    }
    else
    {
        jLabel101.setText("");
        int a=Integer.parseInt(najboljsi1.getText());
        tabela[a-1]+=3;
        int b=Integer.parseInt(najboljsi2.getText());
        tabela[b-1]+=2;
        int c=Integer.parseInt(najboljsi3.getText());
        tabela[c-1]+=1;
        int d=Integer.parseInt(najslabsi1.getText());
        tabela[d-1]-=3;
        int e=Integer.parseInt(najslabsi2.getText());
        tabela[e-1]-=2;
        int f=Integer.parseInt(najslabsi3.getText());
        tabela[f-1]-=1;
        najboljsi1.setText("");
        najboljsi2.setText("");
        najboljsi3.setText("");
        najslabsi1.setText("");
        najslabsi2.setText("");
        najslabsi3.setText("");
        count++;
        jLabel1.setText("Učenec "+count);
    }

Все остальное в операторе if работает нормально, если значение меньше 1 или больше 16, появляется всплывающее окно.


person ma20tej    schedule 26.02.2019    source источник
comment
Не могли бы вы добавить, какую ошибку вы получаете? Кроме того, najboljsi1.getText().isEmpty() может быть первым условием в операторе if.   -  person Abbin Varghese    schedule 26.02.2019


Ответы (3)


Да, вы должны протестировать najboljsi1.getText().isEmpty() ПЕРЕД анализом najboljsi1.getText(). Ваше если бы стало:

if(najboljsi1.getText().isEmpty()||Integer.parseInt(najboljsi1.getText())<1||Integer.parseInt(najboljsi1.getText())>17||
       najboljsi2.getText().isEmpty()||Integer.parseInt(najboljsi2.getText())<1||Integer.parseInt(najboljsi2.getText())>17||
etc...
person Maurice Perry    schedule 26.02.2019

Если вы сделаете Integer.parseInt(najboljsi2.getText()) на метке с textn "" (пустая строка), это не будет целым числом. Будет выброшено исключение.

person Just another Java programmer    schedule 26.02.2019
comment
Должен ли я проверить, пусто ли оно перед тем, как ниже и выше? - person ma20tej; 26.02.2019

Я думаю, что ваша проблема заключается в использовании "Integer.parseInt" без какой-либо проверки! Если, например, переменная содержит пустую строку, она вызовет исключение, и ваше условие if никогда не будет работать!

Я бы разрешил ситуацию с двойной проверкой.

  1. Проверьте, не является ли это уже числом (это руководство может помочь проверить-если-переменная-является-числом-в-javascript)
  2. Затем, если это строка, проверьте, пуста ли она и действительно ли она содержит строку (следующий пост также может помочь проверить-содержит-ли-входная-строка-число-в-javascript)

Пс. Извините, я изменил ответ, добавив несколько дополнительных ссылок.

person t.montanaro    schedule 26.02.2019