나는 사용자의 사용자 이름과 암호를 포함하는 객체 User
의 arraylist가 있습니다. updateUsername
메서드를 만들어 사용자의 사용자 이름을 변경하려고 시도했으며 그 안에 indexOf
을 사용했지만 항상 -1을 반환합니다 (arraylist에서 해당 사용자를 찾을 수 없음).indexOf 항상 -1을 반환합니다
updateUsername 방법 :
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);
}
버튼을 클릭 할 때이 방법은 컨트롤러에서 호출됩니다
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는 별도의 컨트롤러리스트 뷰입니다 - 내가 여기 인스턴스화했습니다 별도의 제어기 :
changeUsernameController cu = (changeUsernameController)fxmlLoader.getController();
cu.lview2 = listView;
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;
}
참고 :이 필요하지만, 내가 여기뿐만 아니라 getAllUsers()
, synToFile()
및 getUser()
방법을 추가했습니다 생각하지 말고 내가 updateUsername()
방법 디버그 라인을 추가 - ArrayList에가 예상대로입니다 be이고 사용자 개체도 정확합니다.
사용자 클래스 :
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;
}
}
사용자 클래스를 표시하십시오. indexOf가 색인을 찾는 방법을 이해합니까? –
'User' 클래스에서'equals'을 오버라이드 했습니까? – Eran
'indexOf'는'equals (Object)'를 사용합니다. 그 코드를 보여줄 수 있습니까? –