为了账号安全,请及时绑定邮箱和手机立即绑定

程序不输出小于 5 的数字

程序不输出小于 5 的数字

侃侃无极 2021-10-17 13:17:41
我有一个问题要输入一个 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");}
查看完整描述

3 回答

?
MM们

TA贡献1886条经验 获得超2个赞

很多人都提到了您的问题,但我会尽力改进您的代码块。


你的问题是块:


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); 运行它失败。


额外的建议


但是让我们试着让你的所有代码稍微好一点。


首先,假设这是您的所有代码行


number = Integer.parseInt(input1);

没用,因为你永远不需要这个值,让我们把它扔掉。如果您保留它,您将需要一个 try...catch 块,以防 input1 不是数字,“abcde”将在此处使您的应用程序崩溃。


接下来检查长度的块可以简化,应该在您尝试阅读任何内容之前出现。


if (number2 >= 6) {

    JOptionPane.showMessageDialog(null, "Not a 5 digit number");

}

if (number2 <= 4) {

    JOptionPane.showMessageDialog(null, "Not a 5 digit number");

}

可以做成单个 if 加上 || (Or) 语句,或者甚至比 != (NOT) 语句更好,而不是检查它是否小于 4 或大于 6,而是检查它是否不是 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");

}

抱歉冗长,但我希望它有所帮助。


查看完整回答
反对 回复 2021-10-17
?
狐的传说

TA贡献1804条经验 获得超3个赞

number2 <= 4不会过滤掉 4 位数字。另外,证明你面前的长度e = input1.charAt(4);


查看完整回答
反对 回复 2021-10-17
?
长风秋雁

TA贡献1757条经验 获得超7个赞

但问题是,每当我输入一个小于 5 位的整数时,程序就会崩溃。


它崩溃是因为您无法使用 访问数组元素index > array.length - 1,例如,如果您的数组长度小于5ie,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");   


查看完整回答
反对 回复 2021-10-17
  • 3 回答
  • 0 关注
  • 205 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信