如果有人能指出我正确的方向,我将非常感激。我正在通过以下在线示例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);
}
}
谢谢。
答案 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。