【问题标题】:Checking to see if an integer has distinct numbers java检查整数是否具有不同的数字java
【发布时间】:2014-11-07 12:49:46
【问题描述】:

我的程序遇到了困难!对于这种方法,我必须检查所有数字是否都是不同的,并且我一生都无法弄清楚我做错了什么。我不知道使用数组是否是最好的方法。我必须调用 getDigit 方法。

for (int i = 0; i <= numDigits(number); i++) {
    int digit = getDigit(number,i);
    if (digit == getDigit(number,i)) {
        return false;
    }
}
return true;

【问题讨论】:

  • 你的方法总是返回false,因为getDigit(number,i) == getDigit(number,i)总是true
  • 什么是numDigits()?和getDigit()?
  • int digit = getDigit(number,i); -> digit == getDigit(number,i) 永远为真
  • 这只是问题之一。
  • 使用this将数字拆分为数字,然后使用this查看是否有重复

标签: java


【解决方案1】:

您可以先从数字中获取每个数字并将它们添加到HashSet,然后将HashSet 的大小与数字中存在的位数进行比较

你可以试试这个代码:

public static void main(String[] args) {
    int val = 123554;
    Set<Integer> set = new HashSet<Integer>(); // HashSet contains only unique elements
    int count = 0;       // keeps track of number of digits encountered in the number
  // code to get each digit from the number
    while (val > 0) {                           
        int tempVal = val % 10;
        set.add(tempVal);         // add each digit to the hash set
// you can have a boolean check like if(!set.add(tempVal)) return false; because add() returns false if the element is already present in the set.
        val = val / 10;
        count++;
    }

    if (count == set.size()) {
        System.out.println("duplicate digit not present");
    } else {
        System.out.println("duplicate digit present");
    }
}

【讨论】:

  • 无论如何都比我的选择好:)
【解决方案2】:

将 Int 拆分为个位数:

使用与此类似的东西:

以正确顺序打印数字的代码:

int number; // = and int
LinkedList<Integer> stack = new LinkedList<Integer>();
while (number > 0) {
    stack.push( number % 10 );
    number = number / 10;
}

while (!stack.isEmpty()) {
    print(stack.pop());
}

Source

检查重复项:

再次,类似与此:

public static boolean duplicates (int [] x, int numElementsInX ) {
    Set<Integer> set = new HashSet<Integer>();
    for ( int i = 0; i < numElementsInX; ++i ) {
        if ( set.contains( x[i])) {
            return true;
        }
        else {
            set.add(x[i]);
        }
    }
    return false;
}

Source


另类

如果您可以拆分数组,则可以使用另一种方法:

int[] numbers = { 1, 5, 23, 2, 1, 6, 3, 1, 8, 12, 3 };
Arrays.sort(numbers);

for(int i = 1; i < numbers.length; i++) {
    if(numbers[i] == numbers[i - 1]) {
        System.out.println("Duplicate: " + numbers[i]);
    }
}

【讨论】:

    【解决方案3】:

    我假设您想比较例如数字 12345 和 23145,并提示错误,如果它们相同(逐位提示正确),对吗? 如果你想这样做,你应该做 2 个数组,你必须确保比较两者的每个位置,这样你就可以逐位比较。

    希望对你有帮助

    【讨论】:

    • 我想得到一个前 1123 的数字并返回 true,因为 1 出现了两次
    • 好的,所以你正在寻找一个确定的数字,得到 X 倍的马赫数,然后打印 true,所以你最好这样做:int[] numbers; //you can initialize the array as you want like @jbutler483 //said,or read from keyboard with Scanner keyboard = new Scanner(System.in); System.out.println("enter an integer:"); int numbers = keyboard.nextInt(); for(int i = 0; i &lt;= numbers.length; i++) { if(numbers[i] == numbers[i - 1]) { System.out.println("Duplicate: " + numbers[i]); } 最好使用链表,这样你就可以比较1º 与数字的其他数字
    【解决方案4】:
    public boolean unique(int theNumber) {
        String number = new Integer(theNumber).toString();
        Set<Character> set = new LinkedHashSet<Character>();
        for(char c:number.toCharArray()) {
            set.add(Character.valueOf(c));
        }
        return number.length() == set.size();
    
    }
    

    【讨论】:

      猜你喜欢
      • 2011-07-27
      • 1970-01-01
      • 2017-11-02
      • 2012-12-08
      • 2021-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多