我必须用JAVA从一组卡片中收集独特的符号。但是,在提供输入的同时,我无法获得独特的结果
这是我尝试过的代码。 但是Set存储所有的值,并且不删除重复的值。 我做错了什么以及如何修改它? 我只在do while循环中使用了List,因为在集合中使用contains()时显示了一个错误。如何删除它以提高效率我必须用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
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;
}