检查整数以查看它是否包含零

给定一个整数,你如何使用Java检查它是否包含0?

 1 =好
 2 =好
 ...
 9 =好
 10 =坏!
 101 =坏!
 1026 =坏!
 1111 =好

如何才能做到这一点?

你的意思是如果十进制表示包含0? 绝对最简单的方法是:

if (String.valueOf(x).contains("0")) 

不要忘记一个数字本身并不“含有0”(当然除了零) – 它取决于基数。 因此十进制中的“10”是hex中的“A”,hex中的“10”是十进制中的“16”……在这两种情况下结果都会改变。

可能有更有效的方法来测试整数的十进制表示中是否存在零,但它们可能比上面的表达式更加复杂。

如果由于某种原因您不喜欢转换为String的解决方案,您可以尝试:

 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是基数10。

编辑:添加条件来处理负数和0本身。

您可以将其转换为字符串并检查它是否包含字符“0”。

 int number = 101; if( ( "" + number ).contains( "0" ) ) { System.out.println( "contains the digit 0" ); } 

Integer.toString(yourIntValue).contains("0");

这是一个在整数中检测零的例程。 要使其适用于任何表示(十进制,hex,八进制,二进制),您需要将基数作为参数传入。

 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 ++ PS转换并不是很难。 任何使用字符串转换的人都感到羞

 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; }