Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 数组有问题的新手_Java_Arrays_Sorting - Fatal编程技术网

Java 数组有问题的新手

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]。我使用此方

我自学Java已经有几个星期了,但我完全陷入了一个我在网上发现的挑战性问题中。我仔细搜索了谷歌,看看是否有人问过,但我似乎什么也没找到。因为我没有老师,我想知道StackOverflow上是否有人能帮我

我对我的一个方法有一个问题,因为它总是让我的测试用例失败,我不确定到底是什么让它出错

基本上,如果我输入一个像[2,8,3,9,7]这样的数组,我希望它的输出像[2,3,7,8,9]。然而,使用我这里编写的这个糟糕的方法,我在开始时不断得到额外的元素,结果是[2,2,3,7,8,9]。我使用此方法的具体目标是找到并返回一个数组,该数组包含所有大于/等于“high”和小于/等于“low”的值,包括重复的值。此数组的长度应与“range”中元素的长度相同,因此方法名为

我只是想被正确地引导到下一步,我应该采取消除这个第一要素问题。我知道代码可能很糟糕,很混乱,所以请容忍我

谢谢大家,;感谢您的帮助

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;iif((低)您只需要
数组.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循环已经教会了我更多关于数组和循环逻辑的知识。这正是我清理代码所需要的。