[英]Why for some values im getting an error but for others im not?
我正在嘗試創建一種方法,該方法采用用戶輸入的數字,測試數字中的每個數字是否為奇數,如果所有數字均為奇數,則返回true,如果所有數字為偶數,則返回false。 這是代碼。
public static boolean allDigitsOdd(int num){
int digits[] = new int[10];
int numDigits = 0;
String numTemp = Integer.toString(num);
while(num > 1){
num = num/10;
numDigits++;
}
numDigits++;
for(int i = 0; i < numDigits; i++){
digits[i] = numTemp.charAt(i) - '0';
System.out.println(digits[i]);
}
for(int i = 0; i < numDigits; i++){
if(digits[i] % 2 == 0){
return(false);
}
if(i == numDigits){
return(true);
}
}
return(true);
}
當我輸入'1234'或'1357'時,它可以很好地工作並返回正確的布爾值,但是當我鍵入幾乎所有其他內容時,它給我一個'String index out of range'錯誤。
digits[1] = numTemp.charAt(i) - '0';
將while(num > 1)
更改為while(num >= 10)
。
否則,它僅適用於以1開頭的數字(例如1234和1357),因為對於以2到9開頭的數字(例如9436534或4334),您的numDigits
計算將過高,導致“字符串索引超出范圍”。
最好忘記numDigits
而只需使用numTemp.length()
。
我會用另一種方式解決。
不要將您的數字轉換成字符串(可以為您提供科學的計數法值和/或數千個定界符等),而是將最后一位數字斬除並除以10得到一個新數字,就像這樣(遞歸!):
public static boolean allDigitsOdd(int num){
if (num < 0) {
throw new IllegalArgumentException("num must be 0 or positive");
}
if (num < 10) { // for 0-9, this is easy
return (num % 2 != 0); // if it isn't even, it's odd
} else { // here comes the fun part
int lastDigit = num % 10; // % is the remainder operation, not the modulo operation
int newNum = num / 10; // because this is how ints work, this chops off the last digit
return (lastDigit % 2 != 0) && allDigitsOdd(newNum); // recursion fun!
// This will only return true if all of the tested digits are odd;
// If there is just one even digit, the && operator returns false
}
}
System.out.println(allDigitsOdd(1242)); // false
System.out.println(allDigitsOdd(73335799)); // true
您可以使用二進制運算符來執行此操作,但這只會使它的可讀性降低,並且速度不那么快。
您甚至可以將所有內容放入一個簡單的循環中:
public static boolean allDigitsOdd(int num)
{
while(num != 0)
{
if(num % 2 == 0)
return false; // last digit is even
num /= 10; // cut of last digit and repeat
}
return true; // all digits were odd
}
這甚至適用於負數!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.