Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将多个正值相加,然后用匹配的数字将其相减_Java_List - Fatal编程技术网

Java 将多个正值相加,然后用匹配的数字将其相减

Java 将多个正值相加,然后用匹配的数字将其相减,java,list,Java,List,我有两个列表,一个是正数,另一个是负数(我把它转换成正数以便于减法)。 我试着用正值减去这些值 到目前为止,当列表中的两个数字相等时,我实现了将值设为零(例如:10和-10,或20和-20) 但是,肯定列表中有一些值(例如:3,2,2,1)可以与列表中的负值(例如:-8)匹配,并使所有值都为零。这是我无法理解的部分。请尽力帮忙 如果输入(再次从excel表格中获取这些值并将其存储在两个单独的列表中,一个为正,另一个为负)为:pos=[10,20,46,5,3,2,2,1]和neg=[-10,-2

我有两个列表,一个是正数,另一个是负数(我把它转换成正数以便于减法)。 我试着用正值减去这些值

  • 到目前为止,当列表中的两个数字相等时,我实现了将值设为零(例如:10和-10,或20和-20)

  • 但是,肯定列表中有一些值(例如:3,2,2,1)可以与列表中的负值(例如:-8)匹配,并使所有值都为零。这是我无法理解的部分。请尽力帮忙
  • 如果输入(再次从excel表格中获取这些值并将其存储在两个单独的列表中,一个为正,另一个为负)为:pos=[10,20,46,5,3,2,2,1]和neg=[-10,-20,-8,-46]
  • 输出应该是[0,0,0,5,0,0,0,0],因为在负数列表中找到匹配项后,所有值都变为零

    for (int b = 0; b < negativeValues.size(); b++) {
        for (int e = 0; e < positiveValues.size(); e++) {
            pvalues = positiveValues.get(e);
            nvalues = negativeValues.get(b);
            if (pvalues == nvalues) {
                result = pvalues - nvalues;
                positiveValues.set(e, 0.0);
                negativeValues.set(b, 0.0);
                // System.out.println(pvalues+" "+nvalues+" "+positiveValues+" "+negativeValues);
                continue;
            }
            if (positiveValues.get(e) != 0 && negativeValues.get(b) != 0
                    && positiveValues.get(e) <= negativeValues.get(b)) {
                max = Collections.max(negativeValues);
                posVal1 = positiveValues.get(e);
                indexOfPos = positiveValues.indexOf(posVal1);
                // System.out.println(posVal1+ " "+max+" "+indexOfPos);
                difference = max - posVal1;
                System.out.println(difference + " " + posVal1);
                while (difference <= 0) {
                    posVal1 = positiveValues.get(e);
    
                }
            }
        }
     }
    

    我认为解决办法并不简单。 您需要找到组合的总和。为此,必须使用递归函数

    例如,我的解决方案:

    static boolean find;
    static boolean[] flag;
    
    public static void findNumber(List<Integer> list, int sumNumber, int targetNumber) {
        if (sumNumber == targetNumber) {
            System.out.println("Find Number");
            find = true;
            return;
        }
    
        for (int i = 0; i < list.size(); i++) {
            if (flag[i] == false && list.get(i) + sumNumber <= targetNumber) {
                flag[i] = true;
                findNumber(list, sumNumber + list.get(i), targetNumber);
                if (find)
                    return;
                flag[i] = false;
            }
        }
    }
    
    public static void main(String[] args) {
        List<Integer> positiveList = new ArrayList<Integer>();
        List<Integer> negativeList = new ArrayList<Integer>();
    
        for (int i = 0; i < negativeList.size(); i++) {
            flag = new boolean[positiveList.size()];
            find = false;
            findNumber(positiveList, 0, negativeList.get(i));
    
            if (find) {
                negativeList.set(i, 0);
                for (int j = 0; j < positiveList.size(); j++) {
                    if (flag[j])
                        positiveList.set(j, 0);
                }
            }
        }
    
        System.out.println("PositiveList: " + positiveList);
        System.out.println("NegativeList: " + negativeList);
    
    }
    
    静态布尔查找;
    静态布尔[]标志;
    公共静态void findNumber(列表、int sumNumber、int targetNumber){
    if(sumname==targetNumber){
    System.out.println(“查找编号”);
    发现=真;
    返回;
    }
    对于(int i=0;i如果(flag[i]==false&&list.get(i)+sumNumber,请为您的问题提供示例输入和输出。@Nurzhan看,这很简单,只要找到可能加起来等于负数的值,然后将它们全部置为零。如果
    pos=[8,15]
    neg=[3,5,10]呢
    ?通过使if更复杂来优化加法/减法?真不敢相信这会起作用…(或者:真正的目标/任务是什么?)现在,我正在尝试为正值而做,忽略您案例中的负值@EganWolf
    static boolean find;
    static boolean[] flag;
    
    public static void findNumber(List<Integer> list, int sumNumber, int targetNumber) {
        if (sumNumber == targetNumber) {
            System.out.println("Find Number");
            find = true;
            return;
        }
    
        for (int i = 0; i < list.size(); i++) {
            if (flag[i] == false && list.get(i) + sumNumber <= targetNumber) {
                flag[i] = true;
                findNumber(list, sumNumber + list.get(i), targetNumber);
                if (find)
                    return;
                flag[i] = false;
            }
        }
    }
    
    public static void main(String[] args) {
        List<Integer> positiveList = new ArrayList<Integer>();
        List<Integer> negativeList = new ArrayList<Integer>();
    
        for (int i = 0; i < negativeList.size(); i++) {
            flag = new boolean[positiveList.size()];
            find = false;
            findNumber(positiveList, 0, negativeList.get(i));
    
            if (find) {
                negativeList.set(i, 0);
                for (int j = 0; j < positiveList.size(); j++) {
                    if (flag[j])
                        positiveList.set(j, 0);
                }
            }
        }
    
        System.out.println("PositiveList: " + positiveList);
        System.out.println("NegativeList: " + negativeList);
    
    }