我已经输入了一个数字。将该数字转换为数组。 我想计算数组整数中的孔数并打印该数。但是,这段代码只是在打印我数组的长度。我无法识别错误。
public static void holesinNum(int num){
int numofholes = 0;
int[] numarr = new int[String.valueOf(num).length()]; //converting a number to array
//int len = numarr.length;
for(int i = 0; i<numarr.length; i++){
if(numarr[i]==8)
{
numofholes +=2;
}
else if(numarr[i]==0 || numarr[i]==6 || numarr[i]==9)
{
numofholes++;
}
}
//return numofholes;
System.out.println("Total holes in int are: " +numofholes);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scan = new Scanner(System.in);
System.out.println("Enter a number: ");
int num = scan.nextInt();
scan.close();
FindholesinNum.holesinNum(num);
}
}
Output:
Enter a number:
8476201
Total holes in int are: 7
It should actually be: 4. 7 is just length of the array
答案 0 :(得分:1)
您不需要一个数组:
public static int holesInNum(int num){
int holes = 0;
while(num > 0){
switch(num % 10){
case 0:
case 6:
case 9:
holes++;
break;
case 8:
holes += 2;
break;
}
num /= 10;
}
return holes;
}
当num % 10
除以num
时,10
是for
的其余部分。如果尚不知道,请单独尝试。
String.valueOf(num)
循环,仍然不会使用数组,而是循环public static int holesInNum(int num){
int holes = 0;
String s = String.valueOf(num);
for(int i = 0; i < s.length(); i++)
switch(s.charAt(i)){
case '0':
case '6':
case '9':
holes++;
break;
case '8':
holes += 2;
break;
}
return holes;
}
中的字符:
if
当然可以使用switch
-s来代替char c=s.charAt(i);
if(c=='8')
holes+=2;
else if(c=='0' || c=='6' || c=='9')
holes++;
,这一部分也完全可以用于您的尝试:
String s=String.valueOf(num);
char[] digits=new char[s.length()];
for(int i=0;i<digits.length;i++)
digts[i]=s.charAt(i);
数组在这里没有自然的位置,因为必须先填充数组:
new[]
您的代码不起作用,因为它在这4行中只有1条int holes=0;
for(int i=0;i<digits.length;i++){
if(digits[i]=='8')
holes+=2;
else if(digits[i]=='0' || digits[i]=='6' || digits[i]=='9')
holes++;
}
,并且该数组保留为空(表示充满零)。
然后进行单独的循环检查
String
结果是:相同的功能,浪费的内存(数组),以及要键入的4-5条额外的代码行(同样是数组)。严格说来{{1}}已经浪费掉了内存,而数组只是复制了它。
答案 1 :(得分:0)
[已更新]
您的代码正在创建具有4个零的数组,然后仅计算零的数量。
更多细节:
您创建并初始化了numarr
(全为零,这是int
的默认值),但是没有覆盖任何值。
numarr
的长度是num
转换为s字符串后的长度。
您的循环最终只是计算numarr
中的零个数。
如果您确实要在算法中使用数组,请尝试遍历char
(每个char
代表一个num
位)的数组:
public static void holesinNum(int num){
int numofholes = 0;
final char[] numChars = String.valueOf(num).toCharArray();
for(int i = 0; i<numChars.length; i++) {
final char c = numChars[i];
if (c=='8') {
numofholes +=2;
} else if (c=='0' || c=='6' || c=='9') {
numofholes++;
}
}
System.out.println("Total holes in int are: " +numofholes);
}
答案 2 :(得分:0)
您的错误在此行:
int[] numarr = new int[String.valueOf(num).length()];
您成功初始化了一个数组,该数组是您输入值的大小,但是您从未在该数组中放置任何数字。
通常来说,执行此操作的最佳方法将不涉及数组。假设您需要使用一个,我将遍历String的每个字符,获取char的数值,并将其分配给数组中的各个位置。这可以通过for循环轻松完成。