我有一个问题要输入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");
}
答案 0 :(得分:0)
number2 <= 4
不会过滤掉4位数字。
另外,请在e = input1.charAt(4);
答案 1 :(得分:0)
您只需要重新排列代码即可。如果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"); }
答案 2 :(得分:0)
所以程序崩溃的原因是因为您在x位置可能存在或不存在char。因此,如果您输入的长度小于x,则您的代码将引发异常。
您可以通过在a = input1.charAt(0);
之前添加支票来解决此问题,例如
if (input1.length() <5){
JOptionPane.showMessageDialog(null, "Not a 5 digit number");
}
答案 3 :(得分:0)
但是问题是,每当我输入小于 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");
答案 4 :(得分:0)
您的问题已被很多人陈述,但是我将尝试改善您的代码块。
您的问题所在:
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。运行失败。
多余的食物摄入量
但是让我们尝试使您的所有代码稍有改进。
首先,假设这是您的所有代码行
number = Integer.parseInt(input1);
是没有用的,因为您永远不需要此值,让我们将其丢弃。如果保留它,则在input1不是数字的情况下,您将需要一个try ... catch块,“ abcde”将在此处使您的应用程序崩溃。
接下来可以简化检查长度的块,并且应该在尝试读取任何内容之前出现。
if (number2 >= 6) {
JOptionPane.showMessageDialog(null, "Not a 5 digit number");
}
if (number2 <= 4) {
JOptionPane.showMessageDialog(null, "Not a 5 digit number");
}
如果使用||,可以将制成单个。 (Or)语句,甚至比!=(NOT)语句更好,而不是检查其小于4还是大于6,检查其Not 5。
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");
}
很抱歉,但我希望它能帮上忙。