Java 数组有问题的新手
我自学Java已经有几个星期了,但我完全陷入了一个我在网上发现的挑战性问题中。我仔细搜索了谷歌,看看是否有人问过,但我似乎什么也没找到。因为我没有老师,我想知道StackOverflow上是否有人能帮我 我对我的一个方法有一个问题,因为它总是让我的测试用例失败,我不确定到底是什么让它出错 基本上,如果我输入一个像[2,8,3,9,7]这样的数组,我希望它的输出像[2,3,7,8,9]。然而,使用我这里编写的这个糟糕的方法,我在开始时不断得到额外的元素,结果是[2,2,3,7,8,9]。我使用此方法的具体目标是找到并返回一个数组,该数组包含所有大于/等于“high”和小于/等于“low”的值,包括重复的值。此数组的长度应与“range”中元素的长度相同,因此方法名为 我只是想被正确地引导到下一步,我应该采取消除这个第一要素问题。我知道代码可能很糟糕,很混乱,所以请容忍我 谢谢大家,;感谢您的帮助Java 数组有问题的新手,java,arrays,sorting,Java,Arrays,Sorting,我自学Java已经有几个星期了,但我完全陷入了一个我在网上发现的挑战性问题中。我仔细搜索了谷歌,看看是否有人问过,但我似乎什么也没找到。因为我没有老师,我想知道StackOverflow上是否有人能帮我 我对我的一个方法有一个问题,因为它总是让我的测试用例失败,我不确定到底是什么让它出错 基本上,如果我输入一个像[2,8,3,9,7]这样的数组,我希望它的输出像[2,3,7,8,9]。然而,使用我这里编写的这个糟糕的方法,我在开始时不断得到额外的元素,结果是[2,2,3,7,8,9]。我使用此方
public static int[] range(int[] a, int low, int high) {
if (a == null || a.length == 0) {
throw new IllegalArgumentException();
}
int[] newArr = new int[0];
if (low <= high) {
if (a.length == 1 && low >= a[0] && high <= a[0]) {
return a;
}
for (int i : a) {
if (i >= low && i <= high) {
int[] duplicate = new int[(a.length + 1)];
int count = 0;
for (int num : a) {
duplicate[count] = num;
count++;
}
duplicate[count] = i;
return duplicate;
}
}
}
if (newArr.length > 1) {
Arrays.sort(newArr);
}
return newArr;
公共静态int[]范围(int[]a、int-low、int-high){
如果(a==null | | a.length==0){
抛出新的IllegalArgumentException();
}
int[]newArr=newint[0];
如果(低=a[0]&&high=低和&I1){
Arrays.sort(newArr);
}
返回newArr;
}如果我正确阅读了您的规范,您将获取一个输入数组
a
,以及两个值low
和high
。您必须返回一个新数组,其中只包含介于(包括)low
和high
之间的元素
您没有编写元素应该按什么顺序排列的任何地方(除了在您的测试用例中,元素按升序排序)。注意:如果需要,可以轻松添加sort()
方法
主要问题是您必须确定返回数组的大小。有很多方法可以做到这一点。为了简单起见,我将在两个循环中完成它
public static int[] range( int[] a, int low, int high) {
int result_size=0;
int i, j;
// determine result size
for (i=0; i< a.length;i++) {
if ((low <= a[i]) && (a[i] <= high)) result_size++;
}
// build the result array
int [] result = new int[result_size];
j = 0; // destination
for (i = 0; i < a.length; i++) {
if ((low <= a[i]) && (a[i] <= high)) {
result[j] = a[i];
j++;
}
}
return result;
}
公共静态int[]范围(int[]a、int-low、int-high){
int result_size=0;
int i,j;
//确定结果大小
对于(i=0;i if((低)您只需要数组.sort
(和null
/长度检查)。为什么要使用其他所有代码?我不是简单地尝试对方法进行排序,因为这本书要求的是不同的东西。那么你想做什么?在@shmosel之后,你到底想做什么?另外,请注意,当你创建重复数组时,你分配的数组比需要的多,你应该执行新的int[a.length];因此,输入[2,8,3,9,7]
,低=2
,和高=9
,它将返回[2,3,7,8,9]
?@BagusTesa不幸的是,它的结果是[2,2,3,7,8,9]。开始时总是有额外的值。如果我传入[1,2,3],它将产生[1,2,3]出于某种原因。非常感谢!第二个foor循环已经教会了我更多关于数组和循环逻辑的知识。这正是我清理代码所需要的。