하위 집합에 대한 알고리즘 작성 시도 중 ... 주어진 벡터의 가능한 모든 하위 집합을 찾아서 어떤 벡터가 목표 값에 더하는 지 찾아야합니다. 그러나, 나는 nullpointerexceptions, 그리고 몇 가지 다른 오류가 계속. 누군가 나를 도울 수 있습니까? 나는 단단한 지점에 있고, 뇌 기능은 거의 없다. 매우 감사. 감사합니다. .업데이트 : subsetSum
java.lang.NullPointerException
at Sumation.subsetSum(Sumation.java:78)
at Sumation.main(Sumation.java:110)
라인 78은 subsetSum 메소드에서 루프의 첫 번째 라인입니다.
/* Ruben Martinez
* CS 210 Data Structures
* Program requires no paramters at main method call;
* instead, a JOptionPane asks for the ints the user
* wishes to search. These must be seperated by commas,
* e.g. 50,40,30 or 35,45,55. Program then asks for a
* target int to find. Program searches for target
* and returns combinations that add up to the target.
*/
import java.util.Vector;
import javax.swing.*;
public class Sumation
{
static int[] array;
static int target;
static Vector<Integer> subsets;
static Vector<Integer> set;
static Vector<Vector<Integer>> outer;
public Sumation() {
//insert integers into array
String defineArray = (String)JOptionPane.showInputDialog(null,
"Enter integers to search. Seperate by commas.", null);
//splits string into array delimeted by commas
String[] arrayString = defineArray.split(",");
//creates int array of size of string array
array = new int[arrayString.length];
//adds ints from args[] to int array
for (int i = 0; i < arrayString.length; i++) {
array[i] = Integer.parseInt(arrayString[i]);
}
//enter integer to search for
String targetString = (String)JOptionPane.showInputDialog(null,
"What is your target integer?", null);
//turns string to int
target = Integer.parseInt(targetString);
set = new Vector<Integer>();
for (int n = 0; n < array.length; n++) {
set.add(array[n]);
}
}
private static Vector<Vector<Integer>> getSubsets(Vector<Integer> set) {
Vector<Vector<Integer>> subsetCollection = new Vector<Vector<Integer>>();
if (set.size() == 0) {
subsetCollection.add(new Vector<Integer>());
} else {
Vector<Integer> reducedSet = new Vector<Integer>();
reducedSet.addAll(set);
int first = reducedSet.remove(0);
Vector<Vector<Integer>> subsets = getSubsets(reducedSet);
subsetCollection.addAll(subsets);
subsets = getSubsets(reducedSet);
for (Vector<Integer> subset : subsets) {
subset.add(0, first);
}
subsetCollection.addAll(subsets);
}
return subsetCollection;
}
public static Vector<Vector<Integer>> subsetSum(Vector<Integer> subsets, int target) {
//creates outer vector
outer = new Vector<Vector<Integer>>();
for (int k = 0; k < subsets.size(); k++) {
//if k is the target, display
if (array[k] == target) {
//creates new inner vector for values that equal target
Vector<Integer> inner = new Vector<Integer>();
outer.add(inner);
//add k to vector
inner.add(array[k]);
}
for (int l =0; l < subsets.size(); l++) {
int sum = subsets.elementAt(k);
if (sum == target) {
//creates new inner vector for values that sum up to target
Vector<Integer> inner = new Vector<Integer>();
outer.add(inner);
//add l,k to vector
inner.add(array[l]);
inner.add(array[k]);
}
else {
System.out.print("");
}
}
}
//return combinations that add up to target in vector form
return outer;
}
public static void main(String[] args) {
//calls sumation constructor
Sumation s = new Sumation();
s.getSubsets(set);
s.subsetSum(subsets, target);
JOptionPane.showMessageDialog(null, "The combinations that equal to "+target+" are \n"+outer, "Vector", JOptionPane.INFORMATION_MESSAGE);
}
}
최소한 NPE가 발생하는 스택 추적 및/또는 회선 번호를 제공해야합니다. * 어떤 * 참조도 null 일 가능성이 있으므로 NPE가 발생했다는 사실은이 추가 정보 없이는 거의 수행 할 수 없습니다. –
미안해! 나는 그것을 여기에 둔다 고 생각했다. 내 코드에 붙여 넣었을 때 실수로 삭제 된 것 같습니다. @ AndrzejDoyle, 여기 있습니다 : –