以下は、私が行っている大学の実践的なコードです。20個のクライアントのtxtファイルを読み込み、その情報は次のようにtxtファイルに保存されます。
Sophia Candappa F 23 00011
講師の指示に従って、この情報をClientというクラスに格納しました(ただし、ArrayListの方が優れていることはわかっていますが、使用できません)。
以下のコードは、すべてのクライアントを相互に比較し、それらが一致するかどうかを判断するために使用されるメソッドです。次のすべての場合、それらは一致します。
- 異性
- 互いに5年以内の年齢
- 彼らには共通の3つの利益があります
後者は、上記の例の文字列「00011」によって決定されます。クライアントが文字列の同じ場所で番号「1」を3回以上共有する場合、3番目の条件が満たされます。
私のコードは完全に機能し、目的の結果を出力します。しかし、私は2つの質問をしたいと思います。
(ArrayListsなしで)可能な限り効率的ですか?私はすべてのif/elseステートメントを別々のメソッドに分離することを検討していましたが、実際のループを減らすことはできないと思ったので、それを拒否しました。
出力を少し変更するにはどうすればよいですか。現在、クライアントが一致した場合、「[クライアント名]は互換性があります」と表示され、新しい行を取り、一致したすべてのクライアントを出力します。クライアントが1つだけ一致する場合は「クライアント名は互換性があります」と表示されるように変更したいのですが、クライアントが2つ以上のクライアントを使用する場合は、「クライアント名は次の[2つと互換性があります」と表示されます。 / three/four]クライアント..。
私は後者を試してみましたが、いつもフォーマットを台無しにしてしまいます。提供できる助けを事前に感謝します。
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("");
}
}