数字孔正在打印数组的大小

时间:2019-07-19 19:21:11

标签: java arrays

我已经输入了一个数字。将该数字转换为数组。 我想计算数组整数中的孔数并打印该数。但是,这段代码只是在打印我数组的长度。我无法识别错误。

 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

3 个答案:

答案 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时,10for的其余部分。如果尚不知道,请单独尝试。


即使您想要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循环轻松完成。