Java中未经检查的操作

时间:2018-10-24 07:07:12

标签: java

我正在完成实验作业,并且在编译时出现此错误。该程序运行良好,有点想修复导致错误的原因。程序代码和完整的错误如下。一如既往的感谢!

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

1 个答案:

答案 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