以下是我正在做的大学实践的代码。它读入一个包含 20 个客户端的 txt 文件,其信息存储在 txt 文件中,如下所示:
Sophia Candappa F 23 00011
根据讲师的指示,我已将此信息存储在一个名为 Client 的类中(尽管我知道 ArrayList 会更好,但我不能使用它)。
下面的代码是一种用于将所有客户端相互比较并确定它们是否匹配的方法。如果它们都符合以下条件,则它们是匹配的:
- 异性
- 年龄相距五年以内
- 他们有三个共同的兴趣
后者由上例中的字符串“00011”确定。如果客户在三个或多个场合在字符串中的同一位置共享数字“1”,则满足第三个条件。
我的代码完美运行并输出所需的结果。不过,我想问两个问题。
它是否尽可能高效(没有 ArrayLists)?我曾考虑将所有 if/else 语句分离为单独的方法,但决定反对它,因为我认为它不会减少任何实际循环。
我怎样才能稍微改变输出。目前,如果一个客户端被匹配,它会显示“[Client Name] is compatible with”,然后它会换行并输出所有匹配的客户端。我想更改它,以便如果客户端只有一个匹配项,它会显示“客户端名称兼容”...,但如果客户端有两个或更多客户端,它会显示“客户端名称与以下 [两个/三/四]客户...
我试过做后者,但我总是弄乱格式。提前感谢您提供的任何帮助。
public static void matchClients(Client[] clientDetails)
{
boolean anyMatch;
int count;
for (int b = 0; b < numberOfClients; b++)
{
anyMatch = false;
count = 0;
for (int c = 0; c < numberOfClients; c++)
{
if (clientDetails[b].getClientGender()!=clientDetails[c].getClientGender())
{
if (Math.abs(clientDetails[b].getClientAge() - clientDetails[c].getClientAge()) <= 5)
{
int interests = 0;
String clientOneInterests = clientDetails[b].getClientInterests();
String clientTwoInterests = clientDetails[c].getClientInterests();
int interestNumber = 0;
while (interestNumber < clientOneInterests.length())
{
if ((clientOneInterests.charAt(interestNumber) == clientTwoInterests.charAt(interestNumber))
&& (clientOneInterests.charAt(interestNumber) == '1' ))
interests++;
interestNumber++;
}
if (interests >= 3)
{
anyMatch = true;
if (count == 0)
{
System.out.println(clientDetails[b].getClientName() + "is compatible with the following client(s)");
System.out.println("\t" + clientDetails[c].getClientName());
}
else
{
System.out.println("\t" + clientDetails[c].getClientName());
}
count++;
}
interests = 0;
}
}
}
if (anyMatch == false)
System.out.println(clientDetails[b].getClientName() + "is not compatible with any client.");
System.out.println("");
}
}