计算整数中不同位数的数量

时间:2014-10-15 21:55:44

标签: arrays string boolean

我正在练习学习Java,我发现在线练习输入一个长整数(例如2827),然后计算整数(2,8和7)= 3中有多少个不同的数字。< / p>

我正在考虑使用for循环,然后使用subString,比较数字是否相等,他们(教程)建议我应该使用数组“used”来记录哪些数字出现,但是

这是我到目前为止所得到的:

import java.util.Scanner;

public class UniqueInteger {
public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
    boolean[] used = new boolean[10];
    int uniqueNbr = 0;

    System.out.print("Input an integer: ");
    String nbrString = String.valueOf(scan.nextLong());

    for (int i = 0; i < nbrString.length(); i++) {
        String bigI = String.valueOf(i);
        if(nbrString.substring(i,(i+1)).equals(bigI)){
            uniqueNbr++;
        }
    }
    System.out.println("Amount of unique digits: " + uniqueNbr);
}

}

我现在的问题是这段代码不起作用,我不确定我是否采取了正确的方法。我也没有找到包含布尔数组“used”的原因或目的。

  • 我的代码出了什么问题?
  • 我如何以智能的方式使用布尔数组并使我的代码更有效率?

1 个答案:

答案 0 :(得分:1)

您需要检查字符串中的当前数字是否已被使用(使用您的布尔数组)。如果尚未使用,请将used [num]设置为true并增加uniqueNbr。

import java.util.Scanner;

public class UniqueInteger {
public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
    boolean[] used = new boolean[10];
    int uniqueNbr = 0;

    System.out.print("Input an integer: ");
    String nbrString = String.valueOf(scan.nextLong());

    for (int i = 0; i < nbrString.length(); i++) {
        int num = Character.getNumericValue(nbrString.charAt(i));
        if(!used[num]) {
            uniqueNbr++;
            used[num] = true;
        }
    }
    System.out.println("Amount of unique digits: " + uniqueNbr);
}

}