在java中使用数组

fur*_*ruf 0 java arrays range

我仍然是新编码的新手.我正在尝试使用填充了"x"元素的数组,并且需要找到一系列数字.参数采用数组,最小数量和最大数量.最终结果需要包括它们之间的最小值,最大值和数字.这是我所说的一个例子:

The starting array:[2, 8, 7, 3, 4]   
Min value: 1
Max value: 5
End result: [2, 3, 4] 
Run Code Online (Sandbox Code Playgroud)

我希望这不会让人感到困惑,而且我有点理解它.

我的代码是这样的:

public static int[] range(int[] a, int low, int high) 
{
  int[] rangeArray = new int[0];

  for (int i = low; i <= high; i++)
  {  
     if (low >= a.length && high <= a.length)
     {
        rangeArray[i] = a[i];
     }
  }

  return rangeArray;
}
Run Code Online (Sandbox Code Playgroud)

Nat*_*ord 5

你的第一个问题是:

int[] rangeArray = new int[0];
Run Code Online (Sandbox Code Playgroud)

这样做的是实例化和名为的int数组rangeArray.然后将其初始化为长度0.因此,添加到此数组的任何内容都将超出范围.您应该将其初始化为返回结果的长度; 在这种情况下很难.

然后我们有这段代码:

for (int i = low; i <= high; i++) //start at the lowest possible number and go to the highest
{  
   //check for validity
}
Run Code Online (Sandbox Code Playgroud)

这里有一些概念问题; 你从迭代lowhigh.如果low非常低(-100万?)并且high同样非常高?这是很多没有结果的想法.

相反,让我们遍历你实际给出的数组:

for (int idx = 0; idx < a.length; idx++) {
  //Check the value of int, if it is in the desired range, save it.
}
Run Code Online (Sandbox Code Playgroud)

最后,让我们考虑一下:

if (low >= a.length && high <= a.length)
Run Code Online (Sandbox Code Playgroud)

这大致转换为"如果我想要的范围的低端大于我正在检查的数字列表的长度,并且我的范围的高端小于相同的长度,则采用'true'分支." 这不是你想要的.

相反,你想要"如果当前指数值介于我的低点和高点之间,请保留它."

if (a[idx] >= low && a[idx] <= high)
Run Code Online (Sandbox Code Playgroud)

滚动起来我们得到:

public static int[] range(int[] a, int low, int high) 
{
  int[] rangeArray = new int[a.length];//this is the most we will need
  int numbersFound = 0;//to keep track of result array index    

  for (int idx = 0; idx < a.length; idx++) {
  {  
     if (a[idx] >= low && a[idx] <= high)
     {
        rangeArray[numbersFound++] = a[i];
     }
  }

  return rangeArray;
}
Run Code Online (Sandbox Code Playgroud)

请注意,在这种情况下,您的数组最后可能会有一些空单元格.使用前请注意这一点!