Java数字比较
有什么东西我可以用来看看一个数字是否以同一个数字开头? 例5643和5377都以五开头Java数字比较,java,startswith,Java,Startswith,有什么东西我可以用来看看一个数字是否以同一个数字开头? 例5643和5377都以五开头 有没有办法用数字来实现这一点,或者它们必须是字符串?(开始?Ich n1和n2是您的号码: return (n1.toString().charAt(0) == n2.toString().charAt(0)); 您必须使用Integer而不是int,因为int没有.toString()方法 如果n1是整数,则可以使用新的整数(n1).toString() 或者更好(Bombe建议): 递归除以10,直到整
有没有办法用数字来实现这一点,或者它们必须是字符串?(开始?Ich n1和n2是您的号码:
return (n1.toString().charAt(0) == n2.toString().charAt(0));
您必须使用Integer而不是int,因为int没有.toString()方法
如果n1是整数,则可以使用新的整数(n1).toString()
或者更好(Bombe建议):
递归除以10,直到整个除法小于10,然后该数字是第一个数字,您可以比较数字。您可以计算第一个数字:
public int getFirstDigit(int number) {
while (number >= 10) {
number /= 10;
}
return number;
}
(这仅适用于正数。)
但是,您可以再次比较字符串表示的第一个字符。字符串比较可能较慢,但由于您的问题是“获取字符串表示形式的第一个字符”,因此这可能是合适的解决方案。:) 最直接的方法(允许不同的长度值)可能正如您所说的,将它们都转换为字符串
int x = 5643;
int y = 5377;
String sx, sy;
sx = "" + x; // Converts int 5643 to String "5643"
sy = "" + y;
boolean match = (sx.charAt(0) == sy.charAt(0));
(内部)(a/10**(内部)数学日志10(a))
可能比字符串解决方案效率低,但没有循环,它使我们处于“数字”领域
(请记住,当您谈论数字中的位数时,log10是您的朋友)
对于负数也不起作用,取第一个绝对值。对于int,int n1和int n2
return ("" + n1).charAt(0) == ("" + n2).charAt(0);
你想说“56”和“5213456”以相同的数字开头,还是不想?你是想出于某种抽象的原因避免使用字符串,还是有真正的理由避免使用字符串?50和“-5”以相同的数字开头?我认为你不能在Java中使用sx。[0]。这对我来说就像是一个C语言。保罗:谢谢,我最近一直写很多C++。如果有评论的话,否决票会更有效。我没有否决票,但现在我只想说“很多”。:P@mmyers:噢!我只是浪费了很多时间来浏览我的答案,寻找“很多”这个词。我想我也需要拼写检查我的评论。:)您还可以使用“String.valueOf(n1).charAt(0)=String.valueOf(n2).charAt(0)”。这样你就可以使用任何你想要的积分类型。它甚至对双打有效。可能是这样,但负面的结果是什么呢?“”+n1是将int n1转换为字符串的方法之一,它可以工作。我认为否决票是对错误或无用的答案的。我的答案也不是错的。否决票可能会误导其他人认为“+n1”根本不起作用。
public static byte firstDigit(int number) {
while (true) {
int temp = number / 10;
if (temp == 0) {
return (byte) Math.abs(number);
}
number = temp;
}
return ("" + n1).charAt(0) == ("" + n2).charAt(0);