我正在完成实验作业,并且在编译时出现此错误。该程序运行良好,有点想修复导致错误的原因。程序代码和完整的错误如下。一如既往的感谢!
import java.util.HashSet;
import java.util.Scanner;
public class Problema4 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int n,s;
while(scan.hasNext()){
n=scan.nextInt();
s=scan.nextInt();
int A[] = new int[n];
for (int i =0; i < n; i++) {
A[i] =scan.nextInt();
}
find(A, s);
}
}
public static void find(int[] A, int sum) {
int[] solution = new int[A.length];
HashSet<String> conjuntos = new HashSet(); // usamos la estructura HashSet para que los subconjuntos no se repitan
find(A, 0, 0, sum, solution, conjuntos);
System.out.println(conjuntos.size());
}
public static void find(int[] A, int currSum, int index, int sum, int[] solution, HashSet<String> conjuntos) {
if (currSum == sum) {
String subConjunto = "";
for (int i = 0; i < solution.length; i++) {
if (solution[i] == 1) {
subConjunto += " " + A[i];
}
}
if (!subConjunto.trim().isEmpty()) {
conjuntos.add(subConjunto);
}
}
if (index == A.length) {
return;
} else {
solution[index] = 1; // selecionamos el elemento
currSum += A[index];
find(A, currSum, index + 1, sum, solution, conjuntos);
currSum -= A[index];
solution[index] = 0; // no seleccionamos el elemento
find(A, currSum, index + 1, sum, solution, conjuntos);
}
return;
}
}
答案 0 :(得分:1)
在使用不带类型说明符的Set
时出现此警告。之所以显示new HashSet();
而不是new HashSet<String>();
,是因为编译器无法检查您是否以类型安全的方式使用Set
。
如果指定要存储的对象的类型,警告将消失:
替换
HashSet<String> conjuntos = new HashSet();
使用
HashSet<String> conjuntos = new HashSet<>();
更多详细信息可以在这里找到:https://docs.oracle.com/javase/tutorial/java/generics/rawTypes.html