拒绝 java swing 中对象数组的重复属性条目
Reject duplicate attribute entry of an array of objects in java swing
我尝试制作一个程序来注册用户,所以我创建了一个用户数组,其属性为:Usuario
(用户 ID)、nombre
(名称)和 contraseña
(密码),每次我创建一个新用户时,程序必须确保用户 ID 之前没有注册,如果它已经注册,程序必须拒绝用户注册,直到我输入不同的用户 ID,创建的每个对象(每个用户及其属性)保存在数组的相应位置,所以我用这些函数创建了一个方法(int contador
将计算我注册用户的次数,数组最多有 10 个,所以 contador
<10):
public void registrarUsuario(int contador){
int f = contador;
usuario = t3.getText();
nombre = t4.getText();
contraseña = t5.getText();
for(int i=0; i<users.length; i++){
\line 43 with error if(users[i].getUsuario() == usuario){
JOptionPane.showMessageDialog(null, "El nombre de usuario ya ha sido utilizado");
}
}
if(this.t6.getText().equals(this.t5.getText())){
Usuario user = new Usuario(usuario, nombre, contraseña);
users[contador] = user;
JOptionPane.showMessageDialog(null, "El usuario se ha registrado con exito!");
this.t3.setText("");
this.t4.setText("");
this.t5.setText("");
this.t6.setText("");
}else{
JOptionPane.showMessageDialog(null, "ERROR: las contraseñas no coididen");
this.t5.setText("");
this.t6.setText("");
}
}
但是当我 运行 程序时我得到这个错误:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at proyecto1.Proyecto1.registrarUsuario(Proyecto1.java:143)
(见上文第 143 行)
在这行代码中:
for(int i=0; i<users.length; i++){
您从未定义数组 users - 因为您忘记了 this 标识符,或者只是忘记定义它。
我知道你想要实现的目标,但我没有完全理解你的方法,因为你没有发送所有 类,所以我会告诉你我是如何解决它的,如果你希望您可以将所有 类 和代码重新发送给我们,以便我们全面查看 :)
我的代码:(当然你可以编辑它来与用户交互,这里我只展示一般的想法)
//User class
package userArray;
public class User {
private int id;
private String name;
private String password;//there is special classes for password in java, not going to use them in this problem
public User(int id, String name, String password) {
super();
this.id = id;
this.name = name;
this.password = password;
}
//getters and setters + toString()
//UsersList class
package userArray;
import java.util.*;
public class UsersList {
ArrayList<User> users = new ArrayList<User>();
//The original function
public User createUser(int id, String name, String password) throws Exception {
for(User u : this.users) {
if(id == u.getId())
throw new Exception("User already exists...");
}
User u = new User(id,name,password);
this.users.add(u);
return u;
}
//The function used to wrap the original function in try/catch each time executed
public User registerUser(int id, String name, String password) {
try {
return createUser(id,name,password);
} catch (Exception e) {
System.out.println("ID "+ id +" for user "+name+" is for an existing user...");
return null;
}
}
public UsersList() {
super();
this.users = users;
}
// + toString()
//Main class
package userArray;
public class Main {
public static void main(String[] args) {
UsersList list = new UsersList();
list.registerUser(1, "Kevin", "Kevin123");
list.registerUser(2, "Sarah", "Sarah123");
list.registerUser(1, "Steven", "Steven123");
list.registerUser(3, "Stephany", "Stephany123");
list.registerUser(3, "Alex", "Alex123");
System.out.println("The list is: ");
System.out.println(list.toString());
}
}
执行结果:
用户 Steven 的 ID 1 用于现有用户...
用户 Alex 的 ID 3 用于现有用户...
列表是:
UsersList [users=[User [id=1, name=Kevin, password=Kevin123], User [id=2, name=Sarah, password=Sarah123], User [id=3, name=Stephany, password=Stephany123]] ]
我尝试制作一个程序来注册用户,所以我创建了一个用户数组,其属性为:Usuario
(用户 ID)、nombre
(名称)和 contraseña
(密码),每次我创建一个新用户时,程序必须确保用户 ID 之前没有注册,如果它已经注册,程序必须拒绝用户注册,直到我输入不同的用户 ID,创建的每个对象(每个用户及其属性)保存在数组的相应位置,所以我用这些函数创建了一个方法(int contador
将计算我注册用户的次数,数组最多有 10 个,所以 contador
<10):
public void registrarUsuario(int contador){
int f = contador;
usuario = t3.getText();
nombre = t4.getText();
contraseña = t5.getText();
for(int i=0; i<users.length; i++){
\line 43 with error if(users[i].getUsuario() == usuario){
JOptionPane.showMessageDialog(null, "El nombre de usuario ya ha sido utilizado");
}
}
if(this.t6.getText().equals(this.t5.getText())){
Usuario user = new Usuario(usuario, nombre, contraseña);
users[contador] = user;
JOptionPane.showMessageDialog(null, "El usuario se ha registrado con exito!");
this.t3.setText("");
this.t4.setText("");
this.t5.setText("");
this.t6.setText("");
}else{
JOptionPane.showMessageDialog(null, "ERROR: las contraseñas no coididen");
this.t5.setText("");
this.t6.setText("");
}
}
但是当我 运行 程序时我得到这个错误:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at proyecto1.Proyecto1.registrarUsuario(Proyecto1.java:143)
(见上文第 143 行)
在这行代码中:
for(int i=0; i<users.length; i++){
您从未定义数组 users - 因为您忘记了 this 标识符,或者只是忘记定义它。
我知道你想要实现的目标,但我没有完全理解你的方法,因为你没有发送所有 类,所以我会告诉你我是如何解决它的,如果你希望您可以将所有 类 和代码重新发送给我们,以便我们全面查看 :)
我的代码:(当然你可以编辑它来与用户交互,这里我只展示一般的想法)
//User class
package userArray;
public class User {
private int id;
private String name;
private String password;//there is special classes for password in java, not going to use them in this problem
public User(int id, String name, String password) {
super();
this.id = id;
this.name = name;
this.password = password;
}
//getters and setters + toString()
//UsersList class
package userArray;
import java.util.*;
public class UsersList {
ArrayList<User> users = new ArrayList<User>();
//The original function
public User createUser(int id, String name, String password) throws Exception {
for(User u : this.users) {
if(id == u.getId())
throw new Exception("User already exists...");
}
User u = new User(id,name,password);
this.users.add(u);
return u;
}
//The function used to wrap the original function in try/catch each time executed
public User registerUser(int id, String name, String password) {
try {
return createUser(id,name,password);
} catch (Exception e) {
System.out.println("ID "+ id +" for user "+name+" is for an existing user...");
return null;
}
}
public UsersList() {
super();
this.users = users;
}
// + toString()
//Main class
package userArray;
public class Main {
public static void main(String[] args) {
UsersList list = new UsersList();
list.registerUser(1, "Kevin", "Kevin123");
list.registerUser(2, "Sarah", "Sarah123");
list.registerUser(1, "Steven", "Steven123");
list.registerUser(3, "Stephany", "Stephany123");
list.registerUser(3, "Alex", "Alex123");
System.out.println("The list is: ");
System.out.println(list.toString());
}
}
执行结果:
用户 Steven 的 ID 1 用于现有用户...
用户 Alex 的 ID 3 用于现有用户...
列表是:
UsersList [users=[User [id=1, name=Kevin, password=Kevin123], User [id=2, name=Sarah, password=Sarah123], User [id=3, name=Stephany, password=Stephany123]] ]