当前位置: 首页 > 知识库问答 >
问题:

返回匹配数组值的索引之和

昝存
2023-03-14

我正在尝试用Java编写一个函数,它接受两个数组,并对数组1中的索引值求和,其中的值与数组2匹配,例如。

  • 数组1={15、6、99、12、35}
  • 数组2={1,12,7,99,35}
  • 匹配“Array1[索引]”值=2(99)、3(12)、4(35)
  • 因此,返回9(2 3 4)

我建议使用以下方法进行此操作:

public int sumIndex(int[] array1, int[] array2) {
    int total = 0;
    for (int i=0; i < array1.length; i++) {
        for (int j = 0; j < array2.length; j++) {
            if (array1[i] == array2[j]) {
                total = total + i;
            }
        }
    }
}

但是如果Array2中有一个不匹配的值,我也想返回-1。所以在上面的情况下,1和7不在Array1中,这样会将总数减少-2(每个缺失值为-1)。

如果我添加“else”语句

else {
    total = total - 1;
}

或“else if”语句

else if (array1[i] != array2[j]) {
    total = total - 1;
}

当I和j循环时,每当存在array1[索引]与array2[索引]不匹配的值时,我就会从总计中删除-1。对于array2中与array1中的值不匹配的值,我尝试只返回-1。

我应该如何编写它,以便只有当array2中的值不是array1的元素时,才会返回total-1?

谢谢

共有3个答案

楚茂实
2023-03-14

您应该使用列表而不是数组。如果您使用列表,您可以使用:

List<Integer> arrayList1 = Arrays.asList(15, 6, 99, 12, 35);
List<Integer> arrayList2 = Arrays.asList(1, 12, 7, 99, 35);
int indexSum = 0;
for(Integer integer : arrayList2){
        indexSum = indexSum + arrayList1.indexOf(integer);
}

当arrayList2的元素integer不存在于ArrayList1中时,indexOf方法返回-1。如果它存在,则该方法将返回索引。因此,如果它不存在,则将-1添加indexSum。如果它存在,则添加索引。

怀刚毅
2023-03-14

只要创建一个标志“已找到”,在每个循环中重置它,并将其设置为“真”,如果在“数组2”中找到“数组1”值,则将其设置为“真”,如果为“假”,则将“总计”减少1。

public int sumIndex(int[] array1, int[] array2) {
    total = 0;
    for (int i=0; i < array1.length; i++) {
        bool found = false;
        for (int j = 0; j < array2.length; j++) {
            if (array1[i] == array2[j]) {
                total = total + i;
                found = true;
            }
        }
        if(!found)
            total--;
    }
}
曾嘉祯
2023-03-14

看看您的示例,我假设数组具有唯一的元素。在这种情况下,您需要执行以下操作:

  1. 找到匹配项后立即中断内部循环。这将提高代码的效率
public class Main {
    public static void main(String[] args) {
        System.out.println(sumIndex(new int[] { 15, 6, 99, 12, 35 }, new int[] { 1, 12, 7, 99, 35, 100, 1000 }));
    }

    static int sumIndex(int[] array1, int[] array2) {
        int total = 0, i, j;
        // Nested loops to calculate sum of indices having equal values
        for (i = 0; i < array1.length; i++) {
            for (j = 0; j < array2.length; j++) {
                if (array1[i] == array2[j]) {
                    total += i;
                    break;
                }
            }
        }

        // Nested loops to decrease 'total' for the non-matching values of array2
        for (j = 0; j < array2.length; j++) {
            for (i = 0; i < array1.length; i++) {
                if (array1[i] == array2[j]) {
                    break;
                }
            }

            // If a match is not found, 'i' will reach a value equal to array1.length
            if (i == array1.length) {
                total--;
            }
        }
        return total;
    }
}

输出:

5
 类似资料:
  • 问题内容: 从如下所示的数组中,如何获取数组中最大值的索引。对于下面的数组,期望的结果将为‘11’。 问题答案: 我的解决方案是: 注意: 这样,您可以检索与给定 最大值 相关的 每个键 。 __ 如果您只对 其中一个键 感兴趣,只需使用 $ maxs [0]

  • 给定两个数组,是否有一种numpy非循环方法来检查数组之间的每个第i个索引是否匹配,即如果a[i]==b[i],是否检查每个i? 我想这已经被问过了,但是我找不到我要找的东西,如果是的话,我很抱歉。

  • 问题内容: 我有一个大数组和一个将索引列表返回到数组的函数,即 典型的情况是范围是整个数组。不幸的是,使用while进行缩放当然是固定时间的。可惜一个人不能从那里回来。 我可以从中返回什么用作整个数组的索引? 问题答案: NumPy有一个可用于构造和对象的助手: 一般而言,与完全相同。

  • 我在下面编写的代码用于替换工作表中的一些索引匹配公式。它似乎工作得很好,但我认为循环有点笨拙,可能容易出错。有人有什么改进建议吗? 谢谢

  • 首先,我对我的英语感到抱歉。我是一个使用VS Express 2013的C#初学者程序员。 我认为这是我的简单问题:我有一个组合框(cboMantello),里面有两个项目。然后我有一个按钮,使用所选项目的属性并将它们添加到我的角色统计中。另一个按钮删除该属性。 为了避免用户垃圾邮件,我禁用了第一个按钮,并设置了我的组合框。启用为false。这时问题来了。禁用组合框后,它会返回列表中的第一项,因此

  • 问题内容: 我正在寻找给定此数组的函数, 我想寻找针头 “面包” 并得到以下结果 问题答案: 使用。您可以提供一个回调,该回调确定哪些元素保留在数组中以及哪些元素应删除。(从回调返回的值指示应删除给定的元素。)类似这样的东西: 欲获得更多信息: 返回值