在数组中搜索元素,然后返回带索引的新数组

时间:2014-01-23 09:57:03

标签: java arrays

如果有人能指出我正确的方向,我将非常感激。我正在通过以下在线示例Murach的Java书来学习Java。我想编写一个带有两个参数的函数:

参数:

1: An int myArr
2: An int num

我想通过“myArr”,并在“myArr”中查找“num”是否存在一次或多次。因此,假设“myArr”在三个地方有“num”,我想在函数中创建一个新数组,并捕获这个新数组中的所有三个索引并返回新数组。我已经有一段时间了,我想我很困惑,可以使用一些帮助。

我的问题是我不确定在函数中声明新的数组大小。如果“myArr”有5个元素,那么就让我们看看:

1,2,1,1,4

如果我正在搜索数字1,正如您所看到的那样,数字1在myArr中出现不止一次。所以现在我需要在函数中声明一个大小为3的新数组,然后将相关的索引(即0,2和3)推送到这个新创建的数组,然后返回它。我没有正确执行for循环,最终使用IndexOutOfBoundArray。我感谢您的时间和建议。

这是我的代码:

public void searchArray(int[] myArr, int num){

    int counter = 0;
    int[] newArr = new int[counter];

    //FOR-LOOP
    for(int i=0; i < myArr.length; i++){
        if(myArr[i] == num){
            counter++;          
        }               
    }
    // SECOND FOR LOOP
    for(int j=0; j < myArr.length; j++){
      newArr[j] = j;
    }

    // PRING OUT 'newArr' elements
    for(int value : newArr){

        System.out.printf(" %d ", value);       
    }
}

谢谢。

4 个答案:

答案 0 :(得分:2)

您的第一个错误是您在计算计数器之前创建newArr,因此它始终创建一个包含0个元素的数组。

其他错误是你错误地设置newArr值

public void searchArray(int[] myArr, int num){

    int counter = 0;

    //FOR-LOOP
    for(int i=0; i < myArr.length; i++){
        if(myArr[i] == num){
            counter++;
        }
    }

    int[] newArr = new int[counter];

    // SECOND FOR LOOP

    for(int i=0, j=0; i < myArr.length; i++){
        if(myArr[i] == num){
            newArr[j++] = i;
        }
    }

    // PRING OUT 'newArr' elements
    for(int value : newArr){

        System.out.printf(" %d ", value);
    }
}

答案 1 :(得分:1)

将您的代码更改为:

public int[] searchArray(int[] myArr, int num){

int counter=0;                //keep track of indices
int[] newArr = new int[myArr.length]; // safer route... All numbers of the array could be same...

//FOR-LOOP
for(int i=0; i < myArr.length; i++){
    if(myArr[i] == num){       // if arr[i] has num
        newArr[counter]=i;     // add index value to newArr 
        counter++ ;            // increment count .. so now newArr points to nextIndex
    }               
}


// PRING OUT 'newArr' elements
for(int value : newArr){

    System.out.println(value);       
}
return newArr;

}

答案 2 :(得分:0)

根据建议,您可以使用可变长度List,但您必须处理int vs Integer

我的建议:首先获取元素的数量,然后创建一个很长的数组,然后用索引填充它。

public int[] searchArray(int[] myArr, int num) {
    // get number of elements
    int n = 0;
    for(int i = 0; i < myArr.length; i++) {
        if(myArr[i] == num) {
            n++;
        }
    }

    // create an array
    int[] indices = new int[n];

    // populate the array with indices
    n = 0;
    for(int i = 0; i < myArr.length; i++) {
        if(myArr[i] == num) {
            indices[n++] = i;
        }
    }
    return indices;
}

答案 3 :(得分:0)

这样做

public int[] searchArray(int[] myArr, int num){
    int counter = 0;     
    //Finding the new Array lenght here;  
    for(int i=0; i < myArr.length; i++){
        if(myArr[i] == num){
            counter++;          
        }               
    }    
   //Creating new array here
   int[] newArr = new int[counter];
    //  Storing the index in the Second array.
    for(int i=0,j=0; i < myArr.length; i++){
         if(myArr[i] == num){
              newArr[j++] = i;                  
         }
    }        
    return newArr;
}

注意:如果数组lenth未知,请使用ArrayList而不是array。