【问题标题】:Trying to compare two ints试图比较两个整数
【发布时间】:2019-07-04 00:07:17
【问题描述】:

这是我第一次提出问题,我尝试先搜索现有线程。我的程序旨在要求用户输入一个 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.");
        }
    }
}

【问题讨论】:

  • "在比较原始数字和反向数字的部分之前,一切似乎都有效。"那么在什么方面不起作用呢?你能举一个具体的例子来说明会发生什么和你期望会发生什么吗?提示:您刚刚编写了一个仅在n 为0 时才会终止的循环。您正在循环中修改n。然后您将nreverse 进行比较...(您可能需要复制原始号码...)
  • 这是磨练调试技能的好时机。在循环之前、内部和之后放置一些断点或 println 语句,然后观察会发生什么。调试是一项重要的学习技能。

标签: java int comparison-operators


【解决方案1】:

将数字转换为数组并将其反转而不是计算它更容易:

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

【讨论】:

  • 我知道,但是在讲师在课堂上介绍之前,我们不允许在这堂课中使用数组。
【解决方案2】:

看看你在这里做什么!

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

这意味着在循环之后,n 将不再是用户输入的 n

要解决此问题,请将 n 复制到另一个变量并进行修改。

int temp = n;
while (length == 5 && temp != 0) {
    reverse = reverse * 10;
    reverse = reverse + temp % 10;
    temp = temp / 10;
}

【讨论】:

  • 感谢大家的反馈。因此,当我在第一次发布代码时运行代码时,数字长度的验证检查有效,但比较 n == 结果没有。谢谢你,Sweeper,提醒我改变了。我修改了长度检查,使其看起来像这样:
  • int temp = n; int 长度 = String.valueOf(temp).length(); while (length > 5 || length
  • 对不起,我不知道如何格式化。基本上,Sweeper 正确地指出,在比较 n 和 reverse 时,我不再比较原始的 n。所以我通过将 n 传递给 temp 变量来纠正它,但现在长度的验证检查不起作用——如果你输入一个三位数的数字,它会正确标记,但之后不能识别一个 5 位数的数字。但是,如果您以 5 位数字开头,则代码可以正常运行。
  • 再次感谢清扫者!通过添加 temp 变量修复 n 和反向比较后,我意识到我必须稍微清理长度验证以与使用 temp 而不是 n 来检查长度保持一致。但现在一切正常。
猜你喜欢
  • 2012-06-05
  • 2012-08-02
  • 1970-01-01
  • 1970-01-01
  • 2011-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-25
相关资源
最近更新 更多