【问题标题】:Comparing 2 array lists with 2D boolean array将 2 个数组列表与 2D 布尔数组进行比较
【发布时间】:2021-04-13 18:33:23
【问题描述】:

我正在制作一个输血游戏。我有 2 个数组列表。一个是捐赠者的血型和姓名,第二个是接受者的血型和姓名。我将获取用户输入的所有名称并将它们存储在一个数组中(收件人数组列表更大)。

我不知道如何使用布尔二维数组比较两个数组列表(应该返回真或假)。例如,在所有捐献者和接受者都输入了他们的姓名和血型后,程序应该告诉每个人是否匹配。

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

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

【问题讨论】:

  • 这个模型不起作用,因为布尔数组只能存储真或假。因此,这意味着您正在通过该特定索引的内容而不是全部来比较数组。创建一个单独的类来存储名称或ID然后根据匹配填充该数组会更有意义......除非您绝对必须使用布尔数组?
  • 您应该从输入和预期输出的示例开始。目前尚不清楚您要实现什么目标,以及您将如何实现它。
  • 它不明显。为什么结构会是一个二维布尔数组?这不是太多的信息。为什么不列出 2 个人员名单,一个代表捐赠者,另一个代表接受者,每个人都有一些个人信息,例如姓名和血型。然后你就可以开始寻找匹配项了吗?

标签: java


【解决方案1】:

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

Main.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());
      }
    }
  }
}

Participant.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);
  }
}

ParticipantMatch.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();
  }
}

如果我们执行该模型,我们会看到 Amy 与 Jim 匹配,而 Alice 与 John 和 James 匹配

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

正如我已经提到的,我不知道血型匹配的工作原理,因此您需要编辑将它们匹配在一起的算法。我刚刚检查了实际字符串是否匹配。

【讨论】:

    猜你喜欢
    • 2018-10-22
    • 2021-05-18
    • 1970-01-01
    • 1970-01-01
    • 2014-11-20
    • 1970-01-01
    • 2010-09-21
    相关资源
    最近更新 更多