我必须用JAVA从一组卡片中收集独特的符号。但是,在提供输入的同时,我无法获得独特的结果

我必须用JAVA从一组卡片中收集独特的符号。但是,在提供输入的同时,我无法获得独特的结果,java,collections,set,unique,Java,Collections,Set,Unique,这是我尝试过的代码。 但是Set存储所有的值,并且不删除重复的值。 我做错了什么以及如何修改它? 我只在do while循环中使用了List,因为在集合中使用contains()时显示了一个错误。如何删除它以提高效率 import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); S

这是我尝试过的代码。 但是Set存储所有的值,并且不删除重复的值。 我做错了什么以及如何修改它? 我只在do while循环中使用了List,因为在集合中使用contains()时显示了一个错误。如何删除它以提高效率

import java.util.*;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        Set<Card> set = new TreeSet<>();
        List<Character> list = new ArrayList<>();
        int count = 0;
        boolean flag;

        do {
            Card c  = new Card();
            System.out.println("Enter a card: ");
            c.setSymbol(sc.nextLine().trim().charAt(0));
            c.setNumber(sc.nextInt());
            sc.nextLine();
            set.add(c);
            count++;
            list.add(c.symbol);
            if(list.contains('a') && list.contains('b') && list.contains('c') && list.contains('d')){
                flag =false;
            }else {
                flag = true;
            }

        }while(flag);


        System.out.println();
        System.out.println("Four symbols gathered in "+count+" Cards.");
        System.out.println("Cards in Set are: ");

        for(Card ca:set) {
            System.out.println(ca.getSymbol()+" "+ca.getNumber());
        }
        sc.close();
    }

}

如果您想存储具有唯一部分数据(此处为卡片符号)的项目,而不是唯一项目(此处为卡片),则最好使用Map而不是Set

import java.util.*;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        Map<Character,Card> map = new TreeMap<>();
        List<Character> list = new ArrayList<>();
        int count = 0;
        boolean flag;

        do {
            Card c  = new Card();
            System.out.println("Enter a card: ");
            c.setSymbol(sc.nextLine().trim().charAt(0));
            c.setNumber(sc.nextInt());
            sc.nextLine();
    if(!map.containsKey(c.symbol))
                 map.put(c.symbol,c);
            count++;
            list.add(c.symbol);
            if(list.contains('a') && list.contains('b') && list.contains('c') && list.contains('d')){
                flag =false;
            }else {
                flag = true;
            }

        }while(flag);


        System.out.println();
        System.out.println("Four symbols gathered in "+count+" Cards.");
        System.out.println("Cards in Set are: ");

        for(char ch:map.keySet()) {
            System.out.println(ch+" "+map.get(ch).getNumber());
        }
        sc.close();
    }

}

您的集合始终将两张卡视为不同的(您在
比较中永远不会返回0
)。此
compareTo
definition将阻止集合接受具有相同符号的两张卡。

您将获得什么输出?你希望得到什么样的结果?为什么要打印1而不是2?是因为它首先发生吗?Card类是如何实现的?我正在获取我输入的所有卡片详细信息。如果我先输入1,然后输入2,则只应打印1,因为“a”是重复值。赛特不应该处理这个吗@VSS CHAITANYA Chavalipublic类卡实现可比较的{public char symbol;private int number;public char getSymbol(){return symbol;}public int getNumber(){return number;}public void setSymbol(char s){symbol=s;}public void setNumber(int n){number=n;}@Override public int-int-compareTo(卡o){返回(这个符号>符号)?1:- 1 } } } } }。它正在工作。但是它可以用SET吗?Pranay Kankariya我编辑了我的答案。如果你发现我的答案有用,请考虑把它作为正确答案。
import java.util.*;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        Map<Character,Card> map = new TreeMap<>();
        List<Character> list = new ArrayList<>();
        int count = 0;
        boolean flag;

        do {
            Card c  = new Card();
            System.out.println("Enter a card: ");
            c.setSymbol(sc.nextLine().trim().charAt(0));
            c.setNumber(sc.nextInt());
            sc.nextLine();
    if(!map.containsKey(c.symbol))
                 map.put(c.symbol,c);
            count++;
            list.add(c.symbol);
            if(list.contains('a') && list.contains('b') && list.contains('c') && list.contains('d')){
                flag =false;
            }else {
                flag = true;
            }

        }while(flag);


        System.out.println();
        System.out.println("Four symbols gathered in "+count+" Cards.");
        System.out.println("Cards in Set are: ");

        for(char ch:map.keySet()) {
            System.out.println(ch+" "+map.get(ch).getNumber());
        }
        sc.close();
    }

}
boolean compareTo(Card c){
    if(this.getsymbol()==c.getSymbol())
        return 0;

    return this.getsymbol()>c.getSymbol()?1:-1;
}