[英]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.