【发布时间】:2011-04-20 08:02:31
【问题描述】:
给定一个整数,如何使用 Java 检查它是否包含 0?
1 = 好 2 = 好 ... 9 = 好 10 = 糟糕! 101 = 糟糕! 1026 = 糟糕! 1111 = 好如何做到这一点?
【问题讨论】:
给定一个整数,如何使用 Java 检查它是否包含 0?
1 = 好 2 = 好 ... 9 = 好 10 = 糟糕! 101 = 糟糕! 1026 = 糟糕! 1111 = 好如何做到这一点?
【问题讨论】:
你的意思是十进制表示是否包含0?这样做的绝对最简单方法是:
if (String.valueOf(x).contains("0"))
不要忘记,一个数字不会“固有地”包含 0 或不包含(当然,零本身除外) - 它取决于基数。所以十进制的“10”是十六进制的“A”,十六进制的“10”是十进制的“16”……在这两种情况下,结果都会改变。
可能有更有效的方法来测试整数十进制表示中是否存在零,但它们可能比上面的表达式涉及更多。
【讨论】:
如果由于某种原因您不喜欢转换为字符串的解决方案,您可以尝试:
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" );
}
【讨论】:
"" + x 将值转换为字符串的方式。它根本没有清楚地表达意图 - 毕竟你对concatenation并不真正感兴趣......你在conversion之后。当然只是 MHO。
String.valueOf() 是不是更难记住?
Integer.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++ 转换并不难 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;
}
【讨论】: