Java 创建一个新数组,其中包含目标值每次出现的索引
我试图创建一个方法,创建一个新数组,其中包含目标值每次出现的索引。我必须使用2个循环来完成这个。第一个计算目标发生的次数。然后创建新数组,以保存这么多索引。然后,第二个循环将索引放入新数组中 我已经编写了下面的代码,但它在Java 创建一个新数组,其中包含目标值每次出现的索引,java,arrays,methods,indexing,Java,Arrays,Methods,Indexing,我试图创建一个方法,创建一个新数组,其中包含目标值每次出现的索引。我必须使用2个循环来完成这个。第一个计算目标发生的次数。然后创建新数组,以保存这么多索引。然后,第二个循环将索引放入新数组中 我已经编写了下面的代码,但它在result[I]=f[I]行抛出javalang数组越界异常:5 public class FindAll { public FindAll() { int a[] = {7, 8, 9, 9, 8, 7}; print(findAl
result[I]=f[I]行抛出javalang数组越界异常:5
代码>
public class FindAll {
public FindAll() {
int a[] = {7, 8, 9, 9, 8, 7};
print(findAll(a, 7));
print(findAll(a, 2));
}
public void print(int p[]) {
System.out.print("{");
int i;
for (i = 0; i < p.length - 1; ++i) {
System.out.print(p[i] + ", ");
}
System.out.print(p[i]);
System.out.print("}");
}
public int[] findAll(int f[], int target) {
int count = 0;
for (int i = 0; i < f.length; ++i) {
if (f[i] == target) {
count++;
}
}
int result[] = new int[count];
for (int i = 0; i < f.length; ++i) {
if (f[i] == target) {
result[i] = f[i];
}
}
return result;
}
}
公共类FindAll{
公共财政部(){
int a[]={7,8,9,9,8,7};
印刷品(findAll(a,7));
印刷品(芬德尔(a,2));
}
公共作废打印(整数p[]{
系统输出打印(“{”);
int i;
对于(i=0;i
试试这个
int result[] = new int[count];
int index = 0;
for (int i = 0; i < f.length; i++)
{
if (f[i] == target){
result[index] = f[i];
index++;
}
}
int result[]=新的int[count];
int指数=0;
对于(int i=0;i
将findAll函数替换为
public int[] findAll(int f[], int target) {
int count = 0;
for (int i = 0; i < f.length; ++i) {
if (f[i] == target)
count++;
}
if(count == 0) return null;
int result[] = new int[count];
for (int i = 0, curr = 0; i < f.length; ++i) {
if (f[i] == target)
result[curr++] = i;
// Here you have to store the index not the value
}
return result;
}
它会很好用的 您正在创建的结果数组是目标出现次数的大小,而不是原始数组的大小
public int[] findAll(int f[], int target)
{
int count = 0;
for (int i = 0; i < f.length; ++i)
{
if (f[i] == target)
count++;
}
int result[] = new int[count]; // This is the size of number of occurrences of target
for (int i = 0; i < f.length; ++i) // 'i' will go up to size of original array
{
if (f[i] == target)
result[i] = f[i]; // You are trying to put the element of the original array in to the same index of your result!?
}
return result;
}
public int[]findAll(int f[],int target)
{
整数计数=0;
对于(int i=0;i
相反,您需要为每个目标元素添加索引:
int resultIndex = 0;
for (int i = 0; i < f.length; i++) {
if ( f[i] == target ) {
result[n] = i;
n++;
}
}
int resultIndex=0;
对于(int i=0;i
您是否使用调试器执行了代码?你肯定会发现为什么会这样。
int resultIndex = 0;
for (int i = 0; i < f.length; i++) {
if ( f[i] == target ) {
result[n] = i;
n++;
}
}