gpt4 book ai didi

java - indexOf 总是返回 -1

转载 作者:行者123 更新时间:2023-12-02 03:05:33 28 4
gpt4 key购买 nike

我有一个对象 User 的数组列表其中包含用户的用户名和密码。我创建了一个updateUsername尝试更改用户的用户名的方法,在其中我使用了 indexOf ,但它总是返回-1(在数组列表中找不到该用户)。

更新用户名方法:

public void updateUsername(User user, String username) {
ArrayList<User> users = getAllUsers();
int i = users.indexOf(user);
user.setUsername(username);
users.set(i,user);
synToFile(users);
}

当单击按钮时, Controller 中会调用此方法:

public JFXListView<Label> lview2;

@FXML
void changeUsername(ActionEvent event) {
String username = newUserField.getText();
UserDAO theDAO = new UserDAO();
Label lbl = lview2.getSelectionModel().getSelectedItem();
//the items in the listview are of object label
User u = theDAO.getUser(lbl.getText());
theDAO.updateUsername(u,username);
ObservableList<Label> userList = theDAO.storeUsers();
lview2.setItems(userList);
}

lview2 是单独 Controller 中的 ListView - 我已在单独 Controller 中实例化:

changeUsernameController cu = (changeUsernameController)fxmlLoader.getController();
cu.lview2 = listView;

我认为这些不是必需的,但我添加了 getAllUsers() , synToFile()getUser()方法也在这里:

public ArrayList<User> getAllUsers() {
Scanner sc;
String record = null;
String[] fields;
ArrayList<User> users = new ArrayList<User>();

try {
sc = new Scanner(dataFile);
while (sc.hasNextLine()) {
record = sc.nextLine();
fields = record.split(";");
String username = fields[0];
String password = fields[1];
User u = new User();
u.setPassword(password);
u.setUsername(username);
users.add(u);
}
} catch (FileNotFoundException e) {
System.out.println("No record found!");
//e.printStackTrace();
}
return users;
}

public void synToFile(ArrayList<User> userList) {
if (userList == null) {
return;
}

try {
FileWriter out = new FileWriter(dataFile);
for (User u: userList) {
out.append(u.toString() + "\n");
}
out.close();
}catch (IOException e) {
e.printStackTrace();
}
}

public User getUser(String username) {
ArrayList<User> users = getAllUsers();
User user = null;
for (User u: users) {
if (u.getUsername().equals(username)) {
user = u;
break;
}
}
return user;
}

注意:我在 updateUsername() 中添加了调试行方法 - ArrayList 是它应该的样子,并且用户对象也是正确的。

用户类别:

package Server;

import java.util.ArrayList;


public class User {

private String username;
private String password;
private ArrayList<Double> scoreList=new ArrayList<Double>();

public User() {

}


public String getUsername() {
return username;
}

public void setUsername(String username) {
this.username = username;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}

public String toString() {
return username + ";" + password;
}

public String usernameString() {
return username;
}
}

最佳答案

您应该重写User 类中的equals 方法。 indexOf 方法内部使用 equals 来查看数组中的每个元素是否等于输入参数。

参见this回答如何在 Java 中重写 equals

关于java - indexOf 总是返回 -1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41792008/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com