基本上,我在链表中搜索用户之间的匹配元素。它基本上是一种约会类型的服务。用户单击搜索按钮,代码就会运行,它会编译匹配项并将其打印到文本字段中。
帐户类别链接:http://pastebin.com/jnBrcnP1
以下是链接列表的样子:
tobi
tobi123
tobi@hotmail.com
tobi
Mixed Breed
Male
1-2
Virginia
Walking
peppy
peppy123
peppy@hotmail.com
peppy
Chihuahua
Male
5-6
Virginia
Eating
这是我的按钮代码:
private void jButtonS1ActionPerformed(java.awt.event.ActionEvent evt) {
LinkedList<Account> account = new LinkedList<Account>();
String username = jTextFieldS1.getText();
if(username.equals("")) // If password and username is empty > Do this >>>
{
jButtonS1.setEnabled(false);
jTextFieldS1.setText("");
jButtonS1.setEnabled(true);
this.setVisible(true);
}
else
{
for(Account acc : account)
{
if(acc.getUsername().equals(username)){
acc.goToNext();
acc.goToNext();
acc.goToNext();
acc.goToNext();
String breed = acc.getDataAtCurrent();
acc.goToNext();
String gender = acc.getDataAtCurrent();
acc.goToNext();
acc.goToNext();
String state = acc.getDataAtCurrent();
if(acc.getUsername().equals(username)== false && acc.getBreed().equals(breed) && acc.getGender().equals(gender)== false && acc.getState().equals(state)){
String match = acc.getUsername();
jTextAreaS1.setText("User: " + match + "is a 90% match!");
}
if(acc.getUsername().equals(username)== false && acc.getBreed().equals(breed) && acc.getGender().equals(gender)== false){
String match = acc.getUsername();
jTextAreaS1.setText("User: " + match + "is a 70% match!");
}
if(acc.getUsername().equals(username)== false && acc.getBreed().equals(breed) && acc.getState().equals(state)){
String match = acc.getUsername();
jTextAreaS1.setText("User: " + match + "is a 70% match!");
}
if(acc.getUsername().equals(username)== false && acc.getState().equals(state) && acc.getGender().equals(gender)== false){
String match = acc.getUsername();
jTextAreaS1.setText("User: " + match + "is a 70% match!");
}
if(acc.getUsername().equals(username)== false && acc.getBreed().equals(breed)){
String match = acc.getUsername();
jTextAreaS1.setText("User: " + match + "is a 50% match!");
}
if(acc.getUsername().equals(username)== false && acc.getGender().equals(gender)== false){
String match = acc.getUsername();
jTextAreaS1.setText("User: " + match + "is a 50% match!");
}
if(acc.getUsername().equals(username)== false && acc.getState().equals(state)){
String match = acc.getUsername();
jTextAreaS1.setText("User: " + match + "is a 50% match!");
}
}
}
try
{
read(account, "doggydates.txt");
} catch (Exception e)
{
System.err.println(e.toString());
}
}
}
1)您需要做的第一件事是创建一个具有不同属性的类(比如Account),如"名字"、"姓氏"、"用户名"、"里德"等。
2) 每当你从用户那里收集详细信息时,创建一个Account类的对象并存储所有属性(可以是你可以对所有属性使用参数化构造函数)。
例如:Account acc=new Account(FirstName,Age,Sex,Breed...);
3) 将这些存储在集合中,稍后使用,这样您就可以简单地执行getBreed()
或getAge()
4) 最后但并非最不重要的是,休息一下,理清思路,设计你计划实施的内容,然后,启动系统。
这里有几件事,首先这不是一个问题,你正在陈述你的程序,仅此而已,但扫描你的代码,你会遇到不止一个问题。
你的第一个问题是设计,显然你有一个名为account的实体,它可以有名字、用户名、电子邮件地址、品种、性别和你想要的任何东西。你必须为它创建一个类(如果你想遵循OOP),或者如果你想跳过OOP,只需要创建一个结构。您正在使用Java,所以我认为您应该使用OOP解决方案。这会让你的生活更轻松。
public class account {
private String name, user_name, email, .... ;
// constructor
// getters and setters
}
现在你可能想创建另一个类,它是一个帐户列表。此类将处理作为对象从列表中获取帐户的问题。例如,您可能有一个名为getNextAccount
的方法,它将遍历列表并获取字符串并创建一个帐户对象。
例如:
Account getNextAccount() {
// seek to the starting position of this account
String name = acc.goToNext();
String username = acc.goToNext();
....
return new Account(name, username, ...);
}
您的代码:
LinkedList<Account> account = new LinkedList<Account>();
不正确。根据您的链接列表,列表的9个节点将创建一个帐户对象,这表明该列表应该是字符串列表,而不是帐户列表。所以你的链接列表应该是:
LinkedList<String> accountsList = new LinkedList<String>();
现在转向您的逻辑,我相信您希望基于不同的标准创建某种匹配百分比。如果第一个If条件为true,则匹配百分比为90%。但问题是,假设第一个if条件为true,因此匹配百分比应为90%,但问题是无论状态值是多少,第二个if条件也将为true,因为您使用的是if
而不是if else
语句。这会让用户感到困惑,想象一下你的程序显示的是:
User: <user_name> is a 90% match!
User: <user_name> is a 70% match!
这是令人困惑的,所以您希望使用if else
语句。
此外,您可能希望创建一个处理文本区域打印的方法。所以,改变你的设计,试着遵循OOP原则,Java是一种OOP语言,修复你的逻辑,你就会运行你的日期匹配程序。