[英]Arrays: Find Numbers with Even Number of Digits
public class Nodigeven {
static int even=0;
static int count=0;
static int findnodigeven(int[] arr) {
for(int i=0;i<arr.length;i++) {
while(arr[i]!=0) {
arr[i]= arr[i]/10;
count++;
}
if(count%2==0) {
even++;
}
}
return even;
}
public static void main(String[] args) {
int[] arr = {122,255,133,14,15,16};
System.out.println(findnodigeven(arr));
}
}
我出錯了 output 即:1 ..你能告訴我我在代碼中哪里出錯了嗎
據我所知,您有兩個錯誤。 首先是您沒有為循環的每次迭代將count to 0
。 第二個是你沒有檢查數組中0
的特殊情況。 0
是單個數字,因此是奇數。 但是由於您從未進入 while 循環,因此 count 將保持0
甚至會遞增。
public class Nodigeven {
static int findnodigeven(int[] arr) {
for (int i = 0; i < arr.length; i++) {
int count = 0;
// check for 0 value and skip.
if (arr[i] == 0) {
continue;
}
while (arr[i] != 0) {
arr[i] = arr[i] / 10;
count++;
}
if (count % 2 == 0) {
even++;
}
}
return even;
}
public static void main(String[] args) {
int[] arr = { 122, 255,0, 133, 14, 15, 16 };
System.out.println(findnodigeven(arr));
}
}
如果您對您感興趣並且在不明確計算數字的情況下執行此操作。 使用Math.log10()
獲取計數,再次跳過0
,因為 0 的對log of 0
未定義。 十進制數 N 的位數是Math.log10(N)+1
。 您可以使用conditional operator
根據需要向奇偶校驗計數添加1
或0
。
public class Nodigeven {
static int even = 0;
static int findnodigeven(int[] arr) {
int even = 0;
for (int i = 0; i < arr.length; i++) {
even += arr[i] != 0 &&
(int) (Math.log10(arr[i])+1) % 2 == 0
? 1 : 0;
}
return even;
}
public static void main(String[] args) {
int[] arr = { 122, 255,0, 133, 14, 15, 16 };
System.out.println(findnodigeven(arr));
}
}
您需要更改代碼中初始化count
的位置 - 它永遠不會重置為 0,因此檢測數字是否具有偶數位數的邏輯不正確。
public class Nodigeven {
static int even = 0;
static int findnodigeven(int[] arr) {
for(int i = 0; i < arr.length; i++) {
int count = 0; // This variable was in the wrong spot!
while(arr[i] != 0) {
arr[i] = arr[i] / 10;
count++;
}
if(count % 2 == 0) {
even++;
}
}
return even;
}
public static void main(String[] args) {
int[] arr = {122,255,133,14,15,16};
System.out.println(findnodigeven(arr));
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.