这是作业
我只想知道错误是什么。 我试图将数组的每个元素相互比较并返回唯一元素的数量。我一个人得错了? 有人可以帮我找出错误是什么吗?
public static int numUnique (double[] list) {
int index = 1;
int result = 0;
if(list.length == 0){return 0;}
while(index < list.length) {
if(list[index] != list[index - 1]) {
result = result + 1;
}
index++;
}
return result;
}
输出:
Failed numUnique([11]): Expecting (1) Actual (0)
Failed numUnique([11 11 11 11]): Expecting (1) Actual (0)
Failed numUnique([11 21 31 41]): Expecting (4) Actual (3)
Failed numUnique([11 11 11 21 31 31 31 31 41]): Expecting (4) Actual (3)
Failed numUnique([11 21 21 21 31 41 41 41 41]): Expecting (4) Actual (3)
Failed numUnique([11 11 21 21 21 31 31 41 41 41 41]): Expecting (4) Actual (3)
答案 0 :(得分:1)
通过将index
的初始值设置为1,您的循环将跳过0元素,因为您可以保证它是唯一的(因为您还没有查看任何元素)。既然如此,您也应该将result
初始化为1。
答案 1 :(得分:1)
逻辑存在缺陷,您只是将每个元素与之前的元素进行比较,并计算它们之间的差异。
它似乎适用于您的示例,因为所有重复项都是彼此相邻的,但您的描述并未指定始终如此。
您希望将每个元素与之前的所有其他元素进行比较,并计算它们的唯一性:
int uniques = 0;
for(int i = 0 ; i < list.length ; i++) {
boolean found = false;
for(int j = 0 ; j < i ; j++) {
if(list[i] == list[j]) {
found = true;
break;
}
}
uniques += found ? 0 : 1;
}
答案 2 :(得分:0)
试试这个:
<强> CODE:强>
public class uniqueElements {
public static void main(String args[]){
double[] list = new double[8];
list[0] = 1.1;
list[1] = 2.4;
list[2] = 3.5;
list[3] = 1.1;
list[4] = 2.4;
list[5] = 2.4;
list[6] = 3.3;
list[7] = 3.5;
System.out.println(numUnique(list));
}
public static int numUnique (double[] list) {
int numUniqueCounter = 0;
A:
for(int i=0;i<list.length;i++){
double currentNumber = list[i];
for(int j=i+1;j<list.length;j++){
if(list[j] == currentNumber){
continue A;
}
}
numUniqueCounter++;
}
return numUniqueCounter;
}
}
<强>输出:强>
4
答案 3 :(得分:0)
使用此功能,高效且单次传递可以确定独特的元素
public static int numUnique(double[] list) {
Set<Double> uniqueSet = new HashSet<>();
for (int i = 0; i < list.length; i++) {
uniqueSet.add(list[i]);
}
return uniqueSet.size();
}
答案 4 :(得分:0)
我无法抗拒:
public static int numUnique (Double[] list) {
return new HashSet<>(Arrays.asList(list)).size();
}
不是从double []到Double []的更改。
您应尽量避免手动循环。正如你所发现的那样,循环是错误的。学习使用这些系列。