Метод проверки, если метка пуста, не работает - PullRequest
0 голосов
/ 26 февраля 2019

Я работаю над программой, которая использует 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);
    }

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

Ответы [ 3 ]

0 голосов
/ 26 февраля 2019

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

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

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

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

0 голосов
/ 26 февраля 2019

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

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...
0 голосов
/ 26 февраля 2019

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

...