Программа не выводит числа меньше 5 - PullRequest
0 голосов
/ 27 сентября 2018

У меня есть вопрос для ввода 5-значного целого числа.Программа выдаст палиндром или нет.И он будет отображать «не палиндром», если целое число не является палиндромом.

Но проблема заключается в том, что программа вылетает всякий раз, когда я ввожу менее 5-значное целое число.Остальное все хорошо.Программа даже выводит «не 5-значное число», когда я ввожу целое число более 5 цифр.

Вот мой код.

String input1;
int number, number2, a, b, d, e;

input1 = JOptionPane.showInputDialog("Enter 5 digit number");

a = input1.charAt(0);
b = input1.charAt(1);
d = input1.charAt(3);
e = input1.charAt(4);

number2 = input1.length();
number = Integer.parseInt(input1);

if (number2 >= 6) {
    JOptionPane.showMessageDialog(null, "Not a 5 digit number");
}
if (number2 <= 4) {
    JOptionPane.showMessageDialog(null, "Not a 5 digit number");
}

if ((a == e) && (b == d)) {
    JOptionPane.showMessageDialog(null, "Palindrome");
} else {
    JOptionPane.showMessageDialog(null, "Not a palindrome");
}

Ответы [ 5 ]

0 голосов
/ 27 сентября 2018

Ваша проблема была заявлена ​​многими людьми, но я постараюсь улучшить ваш блок кода в целом.

Ваша проблема - блок:

a = input1.charAt(0);
b = input1.charAt(1);
d = input1.charAt(3);
e = input1.charAt(4);

Допустим, ваш ввод "1234"следующий массив будет существовать

array [" 1 "," 2 "," 3 "," 4] Массивы в Java, и большинство языков начинаются с 0. Таким образом, ваши доступные позиции - 0, 1, 2 и3. Когда input1.charAt (4); запускается, происходит сбой.


Extra Sugestions


Но давайте попробуем немного сделать весь ваш кодлучше.

Во-первых, предполагая, что это весь ваш код, строка

number = Integer.parseInt(input1);

бесполезна, поскольку вам никогда не нужно это значение, давайте выбросим его. Если вы сохраните его, вам понадобитсяпопробуйте ... перехватить блок в случае, если input1 не является числом, "abcde" приведет к аварийному завершению работы вашего приложения.

Далее блок, в котором вы проверяете длину, может быть упрощен и должен появиться до того, как вы попытаетесь что-либо прочитать..

if (number2 >= 6) {
    JOptionPane.showMessageDialog(null, "Not a 5 digit number");
}
if (number2 <= 4) {
    JOptionPane.showMessageDialog(null, "Not a 5 digit number");
}

можно просто превратить в один, если с помощью оператора || (Или) или даже лучше, чем! = (НЕТT), вместо того, чтобы проверять, меньше ли его четыре или больше 6, проверьте, не является ли его 5. 5. 1026 *

if (number2 != 5) {
    JOptionPane.showMessageDialog(null, "Not a 5 digit number");
}

И у вас есть какой-то лучший код, который не должен давать сбой!

String input1;
int number2, a, b, d, e;

input1 = JOptionPane.showInputDialog("Enter 5 digit number");
number2 = input1.length();

if (number2 != 5) {
    JOptionPane.showMessageDialog(null, "Not a 5 digit number");
    return; //Dont do anything else, or you will get errors.
}

//There are better ways to do this, but this should work.
a = input1.charAt(0);
b = input1.charAt(1);
d = input1.charAt(3);
e = input1.charAt(4);

if ((a == e) && (b == d)) {
    JOptionPane.showMessageDialog(null, "Palindrome");
} else {
    JOptionPane.showMessageDialog(null, "Not a palindrome");
}

Извините за многословие, но я надеюсь, что это помогло.

0 голосов
/ 27 сентября 2018

Но проблема в том, что сбой программы происходит всякий раз, когда я вводю целое число из менее чем 5 цифр.

Это происходит сбой, потому что вы не можете получить доступ к элементу массива с помощью index > array.length - 1, например, еслидлина вашего массива меньше 5, то есть 4, тогда ваш index должен перейти от index=0 to index=3, однако в вашем случае, когда вы вводите число 4, ваш индекс должен варьироваться от 0 до 3Но следующее не удастся, потому что вы пытаетесь получить доступ с index = 4, который находится за пределами индекса диапазона массива.

e = input1.charAt(4); //


Редактируйте, вместо этого вы можете упростить его следующим образом

String input1;
int number2,;

input1 = JOptionPane.showInputDialog("Enter 5 digit number");
number2 = input1.length();
if(number2 == 5) {
    if(input1.substring(0,2).equals(input1.substring(4,5)+input1.substring(3,4)))
        JOptionPane.showMessageDialog(null, "Palindrome");
    JOptionPane.showMessageDialog(null, "Not a palindrome");
}
JOptionPane.showMessageDialog(null, "Not a 5 digit number");   
0 голосов
/ 27 сентября 2018

Вам просто нужно перестроить свой код.input1.charAt(4) может потерпеть неудачу, если input1.length() < 5

input1 = JOptionPane.showInputDialog("Enter 5 digit number");   

number2 = input1.length();
number = Integer.parseInt(input1);

if (number2 >= 6) { 
    JOptionPane.showMessageDialog(null, "Not a 5 digit number"); 
    return;
}
if (number2 <= 4) { 
    JOptionPane.showMessageDialog(null, "Not a 5 digit number"); 
    return;
}

a = input1.charAt(0);
b = input1.charAt(1);
d = input1.charAt(3);
e = input1.charAt(4);

if ((a == e) && (b == d)) { JOptionPane.showMessageDialog(null, "Palindrome"); }
else { JOptionPane.showMessageDialog(null, "Not a palindrome"); }
0 голосов
/ 27 сентября 2018

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

Вы можете решить эту проблему, добавив проверку перед a = input1.charAt(0);, как

 if (input1.length() <5){  
         JOptionPane.showMessageDialog(null, "Not a 5 digit number");  
 }  
0 голосов
/ 27 сентября 2018

number2 <= 4 не будет отфильтровывать 4-значные числа.Кроме того, докажите длину перед вами e = input1.charAt(4);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...