我知道标题确实很糟糕,但是我花了大约10分钟的时间才想出一种以简洁的方式描述我的问题的方法,但是没有。 该程序应该创建一个numUnique()静态方法,该方法返回数组中唯一数字的数量。因此,例如,如果我有一个{2、4、2、7、16、4}数组,则唯一数字将为4(2、4、7和16)。
我正在编写代码以在数组中查找重复项,然后我意识到当我有重复项时我不知道该怎么做,而且我一直在努力思考解决方案但是我不能。
这是到目前为止的代码:
public class Unique {
public static void main(String[] args) {
int[] numbers = {1, 6, 2, 14, 6, 8, 2, 1, 23};
numUnique(numbers);
}
public static void numUnique(int[] array){
Arrays.sort(array);
for (int i = 0; i < array.length; i++) {
for (int j = i + 1; j < array.length; j++) {
if (array[i] == array[j])
//code here
}
}
}
}
答案 0 :(得分:0)
我的理解是您要计算(而不是全部返回)数组中唯一元素的数量。您试图一直向下看,但是足以跟踪重复的次数。这段代码向后看,当前条目是否重复上一个条目(之所以起作用是因为您进行了排序,这是一个很好的步骤)。
import java.util.Arrays;
public class Unique {
public static void main(String[] args) {
int[] numbers = {
1,
6,
2,
14,
6,
8,
2,
1,
23
};
System.out.println(numUnique(numbers));
}
public static int numUnique(int[] array) {
Arrays.sort(array);
int dups = 0;
for (int i = 1; i < array.length; i++) {
if (array[i] == array[i - 1]) {
dups++;
}
}
return (array.length - dups);
}
}
答案 1 :(得分:0)
如果您想保留到目前为止的代码并对列表进行排序,则有两个选项似乎很有意义。一种是返回唯一整数的数量,另一种是返回唯一整数的列表。
返回唯一数字的数量:
public static int numUnique(int[] array) {
ArrayList<Integer> uniques = new ArrayList<>();
Arrays.sort(array);
uniques.add(array[0]);
int prev = array[0];
for (int i = 1; i < array.length; i++) {
if(array[i] != prev){
uniques.add(array[i]);
prev = array[i]
}
}
return uniques.size();
}
返回唯一数字列表,只需要返回不带.size()的唯一列表即可。
如果要使用数组而不是列表,则需要返回以下内容:
return uniques.toArray(new Integer[list.size()]);
答案 2 :(得分:0)
如果您使用的是数组,为什么不做进一步的探索
private static long numUnique(int[] numbers) {
return Arrays.stream(numbers).distinct().count();
}
答案 3 :(得分:0)
按原样保留代码:
如果您想知道数组中有多少个非重复:
public static void numUnique(int[] array) {
Arrays.sort(array);
// Here, make a variable that keeps size of an array
int arrayLenght = array.length;
// Here is our counter:
int duplicates = 0;
for (int i = 0; i < array.length; i++) {
for (int j = i + 1; j < array.length; j++) {
if (array[i] == array[j])
// when you find duplicate, add 1 to our counter:
duplicates++;
}
}
//at the end you can count how many non-duplicates are in the array:
arrayLenght -= duplicates;
System.out.println("There are " + arrayLenght + " non duplicates in our array.");
}
修改 此解决方案并非在每种情况下都适用。
我知道这不是执行此操作的最佳方法,而是我唯一知道的方法:
public static void numUnique(int[] array) {
Arrays.sort(array);
int arrayLenght = array.length;
int duplicates = 0;
for (int i = 0; i < array.length; i++) {
//a little change in our second for-loop:
for (int j = 0; j < array.length; j++) {
if (array[i] == array[j]) {
//Here i'm just summing up the duplicates
duplicates ++;
}
}
// Aaand here, on a console, i print the value (array[i]) and how many duplicates does it have.
//to be exact, if the duplcicates rise only once so it's equal to 1, it means that there is no duplicate of this value (it found itself in the loop).
if (duplicates == 1) {
duplicates = 0;
}
System.out.println(array[i] + " have " + duplicates + "duplicates");
// And what is imporatnt We have to reset our duplication-container!
// so in further loops it will count duplicates for each value in array
duplicates = 0;
}
}
如果您发现其他问题,请立即问我