給定一個整數,如何檢查它是否包含0,使用Java?檢查整數以查看其是否包含零
1 = Good 2 = Good ... 9 = Good 10 = BAD! 101 = BAD! 1026 = BAD! 1111 = Good
這怎麼辦?
給定一個整數,如何檢查它是否包含0,使用Java?檢查整數以查看其是否包含零
1 = Good 2 = Good ... 9 = Good 10 = BAD! 101 = BAD! 1026 = BAD! 1111 = Good
這怎麼辦?
你是說如果十進制表示包含0?這樣做的絕對簡單的方法是:
if (String.valueOf(x).contains("0"))
不要忘記一些不「固有」包含0(除零,當然本身) - 這取決於基礎。所以十進制中的「10」是十六進制中的「A」,十進制中的「10」是十六進制中的「16」......在這兩種情況下結果都會改變。
可能有更有效的方法來測試整數的十進制表示中是否存在零,但它們可能會涉及上述表達式。
您可以將其轉換爲字符串,並檢查它是否包含字符「0」。
int number = 101;
if(("" + number).contains("0")) {
System.out.println("contains the digit 0");
}
我真的不喜歡將一個值轉換爲字符串的'「」+ x「方法。它沒有明確地表達意圖 - 畢竟你並不真正對* concatenation *感興趣......你在*轉換之後*。當然只是MHO。 – 2010-10-02 20:53:33
我承認,這很醜。但它很容易記住。 – tangens 2010-10-02 20:56:56
'String.valueOf()'更難記嗎? – whiskeysierra 2010-10-03 09:41:24
Integer.toString(yourIntValue).contains("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
是基地10
編輯:添加條件來處理負數和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)
}
幾乎duplacate到上面的答案 – Younes 2010-10-04 13:51:55
我不知道這是否容易,但這是另一種方式。 將數字拆分爲一個整數數組。然後分類並檢查第一個元素是否爲零。 E.g
int n = 14501;
// after splitting
int na = {1, 4, 5, 0, 1};
// after sorting
int na = {0, 1, 1, 4, 5};
你能告訴你如何從'n'到'na'嗎? – whiskeysierra 2010-10-03 09:40:15
不使用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;
}
儘管這個算法本來可以比字符串轉換更有效率,但爲什麼模數運算符將會執行OP要查找的內容的一點說明可能會澄清您的帖子。 – Sean 2010-10-03 02:31:55
+1 - 我會在生產代碼中使用此解決方案,直到有人向我證明a)這是一個瓶頸,並且b)另一個解決方案明顯更快。簡單性和可讀性有很多要說的。 – 2010-10-02 21:05:45
感謝您的回答,運作良好。 – 2010-10-02 21:11:46