【发布时间】:2015-12-03 08:03:12
【问题描述】:
我正在编写一个代码,其中我有一个 int[a] 并且该方法应该返回唯一值的数量。示例:{1} = 0 个不同的值,{3,3,3} = 0 个不同的值,{1,2} = 2 个不同的值,{1,2,3,4} = 4 个不同的值等。我不允许对数组进行排序。
问题是我的方法可能不起作用。我的 for 语句有问题,我无法弄清楚。
public class Program
{
public static void main(String[] args)
{
int[] a = {1, 2, 3, 1};
System.out.println(differentValuesUnsorted(a));
//run: 4 //should be 3
}
public static int differentValuesUnsorted(int[] a)
{
int values; //values of different numbers
if (a.length < 2)
{
return values = 0;
}else if (a[0] == a[1])
{
return values = 0;
}else
{
values = 2;
}
int numberValue = a[0];
for (int i = a[1]; i < a.length; i++)
{
if (a[i] != numberValue)
{
numberValue++;
values++;
}
}
return values;
}
}
有人可以帮忙吗?
【问题讨论】:
-
这段代码格式很差,甚至无法运行。请确保您的程序没有任何编译错误,并且在发布之前格式正确。
-
ifelse-ifelsedifferentValuesUnsorted顶部的那些语句,它们只是针对长度小于 2 的数组,还是应该通过具有多个 int 存储在其中? -
你的 for 循环也很糟糕。如果
a[1]的值大于数组的长度会怎样?发生 AIOOB 错误 -
也许我误解了这个任务,但它说(翻译成英文):如果数组为空(长度为 0),该方法应返回 0,因为空数组中有 0 个不同的值.我一直在想,这意味着如果数组有一个值,例如 int[] a = {2} ,则没有不同的值。因此,我一直在尝试使用 if/else-if/else 语句使结果变为: int[] a = {2} => 0 different values, int[] a = {2,2} => 0不同的值,但 int[] a = {1,2} => 2 个不同的值。
-
请注意,如果数组长度为 2 或更大,出于我们的目的,可以说大于 2,因此 3 命中
else if(a[0] == a[1])行,并且前 2 个整数是相同的,它会返回 0,而它应该是 2,而你的 for 循环仍然有问题