我仍然是新编码的新手.我正在尝试使用填充了"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)
你的第一个问题是:
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)
这里有一些概念问题; 你从迭代low到high.如果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)
请注意,在这种情况下,您的数组最后可能会有一些空单元格.使用前请注意这一点!
| 归档时间: |
|
| 查看次数: |
149 次 |
| 最近记录: |