当前位置: 首页 > 知识库问答 >
问题:

如何检查一组对象是否包含具有特定属性的对象

翟源
2023-03-14

请看do while循环,我认为注释是不言自明的。我想检查该集合是否设置了所有具有符号a、b、c、d的卡片(借助数组或其他任何东西实现它)。

package labMST;
import java.util.Scanner;
import java.util.Set;
import java.util.HashSet;
import java.util.Iterator;
    

public class Experiment2_1 {
    
    public class Card{
        char symbol;
        int number;
    }
    
        
    
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        // TODO Auto-generated method stub

        Set<Card> CardSet=new HashSet<>();

        
        char[] array= {'a','b','c','d'};        
        do {
            Card card=new Experiment2_1().new Card();
            
            
            System.out.println("\nEnter a card Symbol: ");
            card.symbol=sc.next().charAt(0);
            System.out.println("\nEnter card number: ");
            card.number=sc.nextInt();
            CardSet.add(card);
            
            
        }while(!CardSet.contains(array)/*The all elements a,b,c,d (of the array) are not present as symbol of cards )/*All four cards Found?*/);
        
        System.out.println("All four cards were found");
        
        
        sc.close();
    }

}




共有1个答案

鲍俊杰
2023-03-14

有几个问题与您的Card类及其用法有关:

> 不要破坏封装,使用访问修饰符来保护类成员,使用getters来公开信息。利用参数化的构造函数,在不需要的时候避免使用setters。

根据经验法则,当您在基于散列的集合中存储类的实例时,您的类应该具有equals/hashCode联系人的正确实现。

为了避免创建封闭类的实例,可以将嵌套类Card标记为static

这就是classCard的样子:

public static class Card {
    private char symbol;
    private int number;
    
    public Card(char symbol, int number) {
        this.symbol = symbol;
        this.number = number;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Card card = (Card) o;
        return symbol == card.symbol && number == card.number;
    }

    @Override
    public int hashCode() {
        return Objects.hash(symbol, number);
    }

    // getters, etc.
}

要找出是否所有字符'a','b','c','d'已被用作Card实例的属性,您可以创建一个包含这些字符的Set,并通过将它们存储到另一组字符中来跟踪卡片中使用的所有符号。

在每次迭代开始时,您可以验证符号集是否包含所有必需的字符,或者是否使用方法set.containsAll()

Set<Card> cards = new HashSet<>();
        
Set<Character> symbols = Set.of('a', 'b', 'c', 'd');
Set<Character> symbolsSeen = new HashSet<>();
        
while (!symbolsSeen.containsAll(symbols)) {
            
    System.out.println("\nEnter a card Symbol: ");
    char symbol = sc.next().charAt(0);
    System.out.println("\nEnter card number: ");
    int number = sc.nextInt();
            
    Card card = new Card(symbol, number);
    cards.add(card);
    symbolsSeen.add(symbol);
}
 类似资料:
  • 问题内容: 如何检查对象在JavaScript中是否具有特定属性? 考虑: 那是最好的方法吗? 问题答案: 我对所给出的答案感到困惑-他们中的大多数都是完全错误的。当然,您可以拥有具有未定义,空值或假值的对象属性。因此,简单地将属性检查减少到甚至更糟,将给您完全误导的结果。 这取决于您要查找的内容。如果您想知道一个对象是否物理上包含一个属性(并且它不是来自原型链的某个地方),那么您就可以这样做。所

  • 问题内容: 在Go中,如何检查对象是否响应方法? 例如,在Objective-C中,可以通过执行以下操作来实现: 问题答案: 一个简单的选择是仅使用您要检查的方法声明一个接口,然后针对您的类型进行类型断言;例如: 如果您打算对自己的类型进行任何疯狂的操作,则可能要使用该软件包。http://golang.org/pkg/reflect

  • 问题内容: 说我的课很简单 我希望将此类s 的集合存储在People类的属性中,该属性是类型为Person的数组 也许我做到这一点如下 问题:请问我如何检查people.list是否包含实例alex? 我很想尝试的简单尝试 称一个错误 问题答案: 有两个功能: 编译器在抱怨是因为编译器知道不是,因此需要一个谓词,但不是谓词。 如果阵列中的人员是(不是),则可以使用: 由于它们不相等,因此可以将第二

  • 我试图使用一种方法来检查一个数组列表是否包含一个带有属性的对象。 这是我目前拥有的,但我无法让它发挥作用。

  • 问题内容: 如何检查以下json中数组中的至少一个元素是否具有具有值的属性? 目前,我正在使用06版草案(此处为 FAQ )。 这是我的NOT WORKING模式: 问题答案: 我设法用弄清楚了。在此版本中,添加了新的关键字。根据此规范草案: 包含 此关键字的值必须是有效的JSON模式。如果数组实例的至少一个元素对给定架构有效,则该数组实例对“包含”有效。 工作模式:

  • 问题内容: 在遍历数组时,我需要一些帮助,我会不断卡住或重新发明轮子。 如何检查数组中是否有两个(或多个)相同的名称值?我不需要计数器,只需在数组值不是唯一的情况下设置一些变量即可。请记住,数组长度是动态的,数组值也是动态的。 问题答案: 使用array.prototype.map和array.prototype.some: