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
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);
}