Java 试图比较两个整数

Java 试图比较两个整数,java,int,comparison-operators,Java,Int,Comparison Operators,这是我第一次问问题,我尝试先搜索现有的线程。我的程序是要求用户输入一个5位数的数字,它将通过反转数字,然后将原始数字与反转数字进行比较来检查它是否是回文。我还加入了一些验证步骤,如果数字长或短于5位,则拒绝该数字。在比较原始数字和反向数字之前,一切似乎都正常。这是我的密码: import java.util.Scanner; public class Palindromes { public static void main(String args[]) { int n

这是我第一次问问题,我尝试先搜索现有的线程。我的程序是要求用户输入一个5位数的数字,它将通过反转数字,然后将原始数字与反转数字进行比较来检查它是否是回文。我还加入了一些验证步骤,如果数字长或短于5位,则拒绝该数字。在比较原始数字和反向数字之前,一切似乎都正常。这是我的密码:

import java.util.Scanner;

public class Palindromes {
    public static void main(String args[]) {
        int n, reverse = 0;
        System.out.println("Enter a 5-digit integer to see if it is a palindrome.");
        Scanner in = new Scanner(System.in);
        n = in.nextInt();
        int length = String.valueOf(n).length();
        while (length > 5 || length < 5) {
            System.out.println("Error: integer must be 5 digits in length.");
            System.out.println("Enter a 5-digit integer.");
            n = in.nextInt();
            length = String.valueOf(n).length();
        }
        while (length == 5 && n != 0) {
            reverse = reverse * 10;
            reverse = reverse + n % 10;
            n = n / 10;
        }
        System.out.println("Reversed number is: " + reverse);
        if (n == reverse) {
            System.out.println("Congratulations! Your number is a palindrome!");
        } else {
            System.out.println("Sorry.  Your number isn't a palindrome.");
        }
    }
}
import java.util.Scanner;
公共类回文{
公共静态void main(字符串参数[]){
int n,反向=0;
System.out.println(“输入一个5位整数,看看它是否是回文。”);
扫描仪输入=新扫描仪(系统输入);
n=in.nextInt();
int length=String.valueOf(n.length();
而(长度>5 | |长度<5){
System.out.println(“错误:整数长度必须为5位”);
System.out.println(“输入一个5位整数”);
n=in.nextInt();
长度=字符串.valueOf(n).length();
}
而(长度=5&&n!=0){
反向=反向*10;
反向=反向+n%10;
n=n/10;
}
System.out.println(“反向编号为:“+反向”);
如果(n==反向){
System.out.println(“祝贺你!你的号码是回文!”;
}否则{
System.out.println(“对不起,你的号码不是回文。”);
}
}
}

将数字转换为数组并将其反转比计算更容易:

let reverseNumber = parseInt(12345.toString().split("").reverse().join());

看看你在这里干什么

while (length == 5 && n != 0) {
    reverse = reverse * 10;
    reverse = reverse + n % 10;
    n = n / 10; // <----- You are changing "n"!
}

“在比较原始数字和反向数字之前,一切似乎都是有效的。”那么,这在什么方面不起作用呢?你能举一个具体的例子说明发生了什么和你期望发生什么吗?提示:您刚刚编写了一个循环,该循环仅在
n
为0时终止。您正在修改循环中的
n
。然后将
n
reverse
进行比较。。。(您可能需要复制原始编号…)这是提高调试技能的好时机。在循环之前、内部和之后放置一些断点或
println
语句,并观察发生了什么。调试是一项重要的学习技能。谢谢大家的反馈。因此,当我在第一次发布代码时运行代码时,数字长度的验证检查有效,但比较n==结果无效。谢谢你,清洁工,提醒我要换衣服。我修改了长度检查,使其看起来像这样:int temp=n;int length=String.valueOf(temp.length();while(length>5 | | length<5){System.out.println(“错误:整数长度必须为5位”);System.out.println(“输入一个5位整数”);n=in.nextInt();length=n;length=String.valueOf(temp.length();}而(length==5&&temp!=0){reverse=reverse*10;reverse=reverse+temp%10;temp=temp/10;抱歉,我不知道如何设置格式。基本上,Sweeper正确地指出,在比较n和reverse时,我不再比较原始的n。因此我通过temp变量传递n来更正它,但现在是t长度的验证检查不起作用——如果您键入一个三位数的数字,它会正确标记,但不会识别后面的5位数。但是如果您以一个5位数的数字开头,代码会正确运行。再次感谢您,Sweeper!在我通过添加temp变量修复了n和反向比较后,我意识到我必须清理长度值使用temp而不是n来检查长度有点不一致。但是现在一切都正常了。我知道,但是在这节课上我们不允许使用数组,直到讲师在课堂上讲解。
int temp = n;
while (length == 5 && temp != 0) {
    reverse = reverse * 10;
    reverse = reverse + temp % 10;
    temp = temp / 10;
}