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

将2个数组列表与二维布尔数组进行比较

景嘉志
2023-03-14

我正在制作一个输血游戏。我有2个数组列表。一个有献血者的血型和姓名,第二个有接受者的血型和姓名。所有的名字我都会得到用户的输入并将它们存储在一个数组中(接受者数组列表更大)。

我不知道如何使用布尔2D数组将两个数组列表进行比较(应该返回true或false)。例如,在所有捐赠者和接受者输入姓名和血型后,程序应该告诉他们是否匹配。

我知道下面的代码是错误的,但我不知道怎么做。

 boolean[][] array = new boolean[donorsList]. 
 [recipientsList];

共有1个答案

艾茂学
2023-03-14

我写了一个解决方案(我不是生物学家,也不知道血型匹配是如何工作的),但它只是简单地检查血液的确切字母是否匹配。我相信你可以自己修改这个。我所做的另一件事不是使用布尔数组,而是使用一个单独的类,其中包含两个匹配项,施主和参与者。因为我在评论中解释的你当前的模式对我来说没有多大意义。如果接收者多于捐赠者,并且一个捐赠者可以与多个接收者进行多个匹配,那么使用布尔数组是没有意义的。。

主要的Java语言

public class Main {
  public static void main(String[] args) {
    Participant donors[] = new Participant[3];
    Participant receivers[] = new Participant[6];
    ParticipantMatch match[] = new ParticipantMatch[6];
    //populate donors
    donors[0] = new Participant("O", "Amy");
    donors[1] = new Participant("A", "Alice");
    donors[2] = new Participant("B", "Ash");
    //populate receivers
    receivers[0] = new Participant("AB", "Joe");
    receivers[1] = new Participant("A", "John");
    receivers[2] = new Participant("O", "Jim");
    receivers[3] = new Participant("B-", "Jace");
    receivers[4] = new Participant("AB-", "Jack");
    receivers[5] = new Participant("A","James");
    //check for match
    int matchcounter = 0;
    for (int i = 0; i < donors.length; ++i) {
      for (int j = 0; j < receivers.length; ++j) {
        if (donors[i].matches(receivers[j])) {
          match[matchcounter++] = new ParticipantMatch(donors[i], receivers[j]);
        }
      }
    }
    for (int i = 0; i < match.length; ++i) {
      if (match[i] != null) {
        System.out.println(match[i].toString());
      }
    }
  }
}

参与者Java语言

public class Participant {
  private String bloodtype;
  private String name;
  public Participant(String bloodtype, String name) {
    this.bloodtype = bloodtype;
    this.name = name;
  }
  public String getbloodtype() {
    return bloodtype;
  }
  public String getname() {
    return name;
  }
  public boolean matches(Participant p) {
    return this.bloodtype.equals(p.bloodtype);
  }
}

参与者Match.java

public class ParticipantMatch {
  private Participant donor;
  private Participant receiver;
  public ParticipantMatch(Participant donor, Participant receiver) {
    this.donor = donor;
    this.receiver = receiver;
  }
  public Participant getdonor() {
    return donor;
  }
  public Participant receiver() {
    return receiver;
  }
  public String toString() {
    return "Donor: " + donor.getname() + "-Receiver: " + receiver.getname() + "-Bloodtype: " + donor.getbloodtype();
  }
}

如果我们执行这个模型,我们会看到艾米与吉姆匹配,而爱丽丝与约翰和詹姆斯匹配

Donor: Amy-Receiver: Jim-Bloodtype: O
Donor: Alice-Receiver: John-Bloodtype: A
Donor: Alice-Receiver: James-Bloodtype: A

正如我已经提到的,我不知道血型匹配是如何工作的,所以您需要编辑匹配它们的算法。我只是检查了实际字符串是否匹配。

 类似资料:
  • 如何比较两个列表是否相等验证数据来自Excel工作表。我需要验证两个列表是否相同,并且列表中没有附加元素或缺少元素。我不需要对列表进行排序。打印输出CAGID Excel data=CAGID Web列表

  • 在我的JavaScript小程序中,我必须检查a和b输入值:如果它们是新的一对,则这一对将作为1D向量添加到小程序的历史记录中。 因此,我制作了一个历史2D数组,其中存储了所有新的对。程序循环数组,将新对与历史数组的每一行进行比较。然而,我有一个问题:当比较的结果应该是真的(即,当I==1时),我得到了一个假结果。 我读了这一页:https://www.w3schools.com/js/js_ar

  • 我很好奇如何比较这些数组,请记住这是一个示例,它不限于 4 个数组,因为这可能或多或少取决于用户选择) 最终目标是根据上述所有数组的比较/验证,获得一个具有真值或假值的新数组,仅当所有 4 个数组在该索引位置都有一个真值时,才应设置一个真值,如果它们是否为假值,例如: 希望我解释得正确。

  • 本文向大家介绍将二维数组转为一维数组的2种方法,包括了将二维数组转为一维数组的2种方法的使用技巧和注意事项,需要的朋友参考一下 如何将下面的二维数组转为一维数组。 第一种方法: 第二种方法: 以上两种解法print_r($names);后的结果为: 注意:array_column();可以有第三个参数,如 $n = array_column($msg, 'name', 'id'); print_r

  • 问题内容: 当我在大学时使用C ++时,我被告知要尽可能使用多维数组(因此称为MDA),因为它以较大的块分配,因此具有更好的内存局部性。另一方面,阵列数组(AoA)被分配为多个较小的块,可能分散在物理内存中发现空缺的所有位置。 所以我想第一个问题是:这是神话,还是值得遵循的建议? 假设是后者,那么下一个问题将是在没有真正MDA的Java之类的语言中做什么。当然,用1DA模拟MDA并不难。本质上,具

  • 问题内容: 要求“比较应为或”。 但是,如果我遵循此规则,则会得到不同/错误的结果。为什么? 问题答案: 该建议仅适用于测试值的“真实性”的语句。是另一种野兽。 请注意,这始终是因为是数组而不是布尔值,并且执行简单的引用相等性测试(例如,仅;例如)。