【问题标题】:Java - Print last digit of a number as well as the digit before [closed]Java - 打印数字的最后一位以及[关闭]之前的数字
【发布时间】:2014-04-20 20:57:10
【问题描述】:

如果我想打印一个数字的最后一位(比如 16),我使用:number % 10 并且输出为 6。如果我想打印最后一位之前的数字,我可以将该数字除以 10 和强制转换为 int。这仅适用于数字!如果我想获得6之前的数字,我肯定会获得0,但挑战是获得相同的数字而不是0。这是怎么回事?

【问题讨论】:

  • 那么改用% 100 怎么样?
  • 你的号码是什么类型的?我认为正确的方法不是直接处理数字,而是处理它的 String 表示。
  • 如果不是数字那是什么?
  • 请提供样本输入和预期输出
  • 您的问题非常无法解密:1.“我可以将数字除以 10 并转换为 int” - 嗯,它已经是 int 根据事实上,你在上面使用%。因此,您只需将其除以 10 并在结果上使用 %10。 2.“这只适用于数字”——我们这里除了数字之外还有其他的东西吗?如果是,那么在您的问题中没有该事实的痕迹。 3.“如果我要获得6之前的数字,我肯定会获得0”......你到底想说什么????

标签: java for-loop return division modulus


【解决方案1】:

一个简单的实现可能如下所示:

import static java.lang.Math.abs;
import static java.lang.Math.max;
import static java.lang.Math.min;

public static void main(String[] args) {
   System.out.println(getNthNumber(-16, -14)); // 1
   System.out.println(getNthNumber(16, -14)); // 1
   System.out.println(getNthNumber(16, 0)); // 1
   System.out.println(getNthNumber(16, 1)); // 6
   System.out.println(getNthNumber(16, 4)); // 6
   System.out.println(getNthNumber(12345678, 4)); // 5
}

static int getNthNumber(final int pNumber, final int pIndex) {
   final String numberString = Integer.toString(abs(pNumber));
   return numberString.charAt(max(0, min(pIndex, numberString.length() - 1))) - '0';
}

【讨论】:

  • 这是一个矫枉过正,恕我直言。
  • 但它正在工作 :-) 并且对于大数字也是如此
  • 是的,这是真的。 PS:我编辑了您的答案,以消除不必要的字符串转换并解析为整数。
  • Thx ;-) 我添加了对 IndexOutOfBoundExceptions 的检查和一些示例
【解决方案2】:

我不确定,但我认为您对某些事情感到困惑。这是直接的数学方法:

int i = 16;
int lastDigit = i % 10;
int precedingDigit = (i / 10) % 10;

在 Java 中,当你进行整数除法时,结果总是向零舍入。


对于您提供的示例,如果是 5。您希望两次获得相同的数字:

int i = 5;
int lastDigit = i % 10;
int precedingDigit = (i == lastDigit) ? lastDigit : ((i / 10) % 10);

【讨论】:

  • 它有效。但是,我仍然是 Java 的初学者。我不明白你代码的最后一行 Martijn Courteaux。
  • 这是一个三元运算符,基本上可以归结为某种if ... then ... else 并返回适当的值。
  • 我不喜欢上面的解决方案(但这可能看起来很形象)是它使用 math 来决定关于 digit的问题>。我认为 digits 属于数字的 文本表示 领域,而不是数字本身。像 before 这样使用的表达式也指出了这一点。使用 Modulo 运算符是在 math 领域,并且只有在您知道所用表示的 base 时才有效。考虑一下这种挑剔,但我会选择String 方法。
  • tilois,您已经准确地向 Stack Overflow 的所有程序员解释了我的整个问题。谢谢你:)
猜你喜欢
  • 2019-11-06
  • 2020-07-09
  • 2017-07-25
  • 1970-01-01
  • 1970-01-01
  • 2012-10-23
  • 2015-09-17
  • 1970-01-01
  • 2011-04-18
相关资源
最近更新 更多