我试图比较两个整数的数字,以判断它们是否有不同的数字。 我的hasDistinctIntegers方法遇到问题。它并不经常评估应该是什么。如果数字没有重复数字则为真,否则为false。我相信我的其他方法工作正常,但我真的可以使用另一组眼睛!以下是我到目前为止的情况:
public static void main(String[] args) {
System.out.println(hasDistinctDigits(12345));
}
public static boolean hasDistinctDigits(int number) {
boolean returner = true;
int count1 = 0;
int digit = 0;
int curNum = number;
while (count1 < numDigits(number)) {
int count2 = 0;
digit = getDigit(curNum, count1);
curNum = curNum / 10;
while (count2 < numDigits(curNum)) {
if (digit == getDigit(curNum, count2)) {
returner = false;
}
count2++;
}
count1++;
}
return returner;
}
public static int numDigits(int number) {
int count = 0;
while (number != 0) {
number /= 10;
count++;
}
return count;
}
public static int getDigit(int number, int i) {
int digit = 0;
int count = 0;
int originalNum = number;
while (count <= i) {
if (count == i) {
digit = number % 10;
}
number /= 10;
count++;
}
if (i > numDigits(originalNum)) {
return -1;
} else {
return digit;
}
}
public static int indexOf(int number, int digit) {
int count = 0;
int index = -1;
while (count < numDigits(number)) {
if (getDigit(number, count) == digit) {
index = count;
}
count++;
}
return index;
}
提前感谢任何提示/建议!
答案 0 :(得分:2)
使用Set<Integer>
您可以这样编码:
public static boolean hasDistinctDigits(int number)
{
final Set<Integer> set = new HashSet<Integer>();
while (number > 0) {
if (!set.add(number % 10))
return false;
number /= 10;
}
return true;
}
您也可以使用普通数组:
public static boolean hasDistinctDigits(int number)
{
// We rely on Java's default values here:
// uninitialized ints will be set to 0.
final int[] digits = new int[10];
// But for peace of mind, we can...
Arrays.fill(digits, 0);
int digit;
while (number > 0) {
digit = number % 10;
if (digits[digit]++ > 0)
return false;
number /= 10;
}
return true;
}
请注意,上述两种方法都不会检查其参数是否大于0.
使用Java 8,您甚至可以获得更多乐趣:
public static boolean hasDistinctDigits(int number)
{
final Set<Integer> set = new HashSet<>();
return String.valueOf(number).chars().allMatch(set::add);
}
但在这个级别,这是智力手淫,真的......(或(Int)Stream
滥用 - 你的选择)