给定一个整数,如何使用Java检查它是否包含数字0?
1 = 合格 2 = 合格 ... 9 = 合格 10 = 不合格! 101 = 不合格! 1026 = 不合格! 1111 = 合格
如何实现呢?
你的意思是判断十进制表示中是否包含0?最简单的方法是:
if (String.valueOf(x).contains("0"))
不要忘记一个数字并没有固有地包含0或不包含0(当然除了0本身)- 它取决于进制。因此,在十进制中,“10”是16进制中的“A”,而在16进制中,“10”是十进制中的“16”... 在这两种情况下,结果都会改变。
可能有更有效的方法来测试一个整数的十进制表示中是否存在0,但它们很可能比上面的表达式复杂得多。
如果你不喜欢将值转换为字符串的解决方案,可以尝试:
boolean containsZero(int num) {
if(num == 0)
return true;
if(num < 0)
num = -num;
while(num > 0) {
if(num % 10 == 0)
return true;
num /= 10;
}
return false;
}
假定 num
是十进制。
编辑:添加了处理负数和零本身的条件。
int number = 101;
if( ( "" + number ).contains( "0" ) ) {
System.out.println( "contains the digit 0" );
}
"" + x
将值转换为字符串的方法。它并没有清晰地表达出意图 - 你并不是真正关心连接,而是想要进行一种转换。当然这只是我的个人看法。 - Jon SkeetString.valueOf()
更难记吗? - whiskeysierraInteger.toString(yourIntValue).contains("0");
public static boolean hasZero(int num, int base) {
assert base > 0 : "must have positive non-zero base";
if (num == 0)
return true;
while(num != 0) {
if (num % base == 0) {
return true;
}
else {
num = num / base;
}
}
return false;
}
public static void main(String args[]) {
System.out.println(hasZero(10, 10)); // true (base 10 int)
System.out.println(hasZero(-12, 10)); // false (base 10 int)
System.out.println(hasZero(0x10, 16)); // true (hex is base 16)
System.out.println(hasZero(0x1A, 16)); // false (hex is base 16)
}
我不知道这是否更容易,但这里有另一种方法。 将数字拆分为整数数组。然后排序并检查第一个元素是否为零。 例如
int n = 14501;
// after splitting
int na = {1, 4, 5, 0, 1};
// after sorting
int na = {0, 1, 1, 4, 5};
虽然不使用Java,但从C++转换并不难。 附言:任何人使用字符串转换都应该感到羞耻。
bool Contains0InBase10( unsigned int i, unsigned int& next )
{
unsigned int divisor = 10;
unsigned int remainder = 0;
while( divisor <= i )
{
unsigned int newRemainder = i%divisor;
if( newRemainder - remainder == 0)
{
// give back information allowing a program to skip closer to the next
// number that doesn't contain 0
next = i + (divisor / 10) - remainder;
return true;
}
divisor *= 10;
remainder = newRemainder;
}
return false;
}