基本上我正在搜索用户之间匹配元素的链表。它基本上是一种约会式服务。用户单击搜索按钮并运行代码,它将编译匹配并将其打印到文本字段。
指向帐户类的链接: 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());
}
}
}
答案 0 :(得分:0)
这里有一些事情,首先这不是一个问题,你说的是你的程序就是这样,但是通过代码扫描你会遇到一个以上的问题。
你的第一个问题是设计,显然你有一个叫做帐户的实体,它可以有你想要的名字,用户名,电子邮件地址,品种,性别等等。如果你想跳过OOP,你必须为它创建一个类(如果你想要遵循OOP)或者只是一个结构。您正在使用Java,所以我相信您应该使用OOP解决方案。它会让你的生活更轻松。
public class account {
private String name, user_name, email, .... ;
// constructor
// getters and setters
}
现在您可能想要创建另一个类,即Account列表。该类将处理从列表中获取帐户作为对象。例如,您可能有一个名为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条件为真,则匹配百分比为90%。但这是问题,假设第一个if条件为真所以匹配百分比应为90%,但问题是第二个if条件也将为真,无论状态值是什么,因为你使用的是if
不是if else
声明。这会让用户感到困惑,想象一下您的程序会显示:
User: <user_name> is a 90% match!
User: <user_name> is a 70% match!
这很令人困惑,因此您希望使用if else
语句。
您还可以创建一个处理文本区域打印的方法。因此,改变您的设计,尝试遵循OOP原则,Java是一种OOP语言并修复您的逻辑,您将运行日期匹配程序。