2016-07-20 2 views
0

私のアプリケーションでは、コンソール名、ユーザー名、パスワードを入力する必要があります。その後、プログラムはログインをダイナミック配列の関与にチェックし、そうでない場合はそれを追加し、そうであればエラー警告を表示する必要があります。 実行すると、入力ボックスが静かに "name"、 "username"、 "password"の上に入力されます。しかし、プログラムは配列への関与を確認するログインを行わず、エラーメッセージを表示します。また、配列フィールドを取りません。ArrayListに何も入っていないようです

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.util.ArrayList; 

public class User { 
    public static void main(String[] args) throws IOException { 
     BufferedReader bReader =new BufferedReader(new InputStreamReader(System.in)); 
     String name = bReader.readLine(); 
     String login = bReader.readLine(); 
     String password = bReader.readLine(); 
     UserADD(name,login,password); 

    } 
    public static ArrayList<String> UserADD(String name,String login,String password) { 
     ArrayList <String> users = new ArrayList<String>(); 

     for (int i = 0; i<users.size(); i++) { 
      if (users.contains(login)) { 
       System.out.println("Это имя пользователя уже занято"); 
      } 
      else users.add(name); 

      users.add(login); 
      users.add(password); 

      System.out.println(users); 
     } 

     return users; 
    } 
} 
+0

エラーメッセージ – Blobonat

+3

を送信してください。「ユーザー」は常に空です。 'UserADD'メソッドを呼び出すたびにローカル変数を作成しています。 –

答えて

0

​​はローカルメソッドです。つまり、メソッドを呼び出すたびに別のオブジェクトが作成され、最初は空です。

mainメソッドにArrayListを作成し、それをuserAdd()の引数として渡すことが考えられます。

あなたが習っているように、Javaベストプラクティスに従ってください。大文字で関数名を開始しないでください。クラス名のために予約されています。

0

ArrayList usersは、ローカルUserADDの下にあります。 ArrayList usersをグローバルとして宣言すると問題が解決されます。

public class User { 

//Global declaration of ArrayList users 
public static ArrayList <String> users = new ArrayList<String>(); 

public static void main(String[] args) throws IOException { 
    BufferedReader bReader =new BufferedReader(new InputStreamReader(System.in)); 
    String name = bReader.readLine(); 
    String login = bReader.readLine(); 
    String password = bReader.readLine(); 
    UserADD(name,login,password); 

} 
public static ArrayList<String> UserADD(String name,String login,String password) { 
    //don't initialize users ArrayList here 
    for (int i = 0; i<users.size(); i++) { 
     if (users.contains(login)) { 
      System.out.println("Это имя пользователя уже занято"); 
     } 
     else users.add(name); users.add (login);users.add(password); 

     System.out.println(users); 
} 


    return users; 
} 
} 
0

クラスオブジェクト内のユーザーを関数呼び出しよりも長く存続させる必要があります。ビットのように:

public class UserRegistration { 

    private List<String> users = new ArrayList<>(); 

public static void main(String[] args) throws IOException { 
    new UserRegistration().run(); 
} 

private void run() { 
    BufferedReader bReader =new BufferedReader(new InputStreamReader(System.in)); 
    String name = bReader.readLine(); 
    String login = bReader.readLine(); 
    String password = bReader.readLine(); 
    addUser(name,login,password); 
} 

public boolean addUser(String name,String login,String password) { 
    for (int i = 0; i<users.size(); i++) { 
     if (users.contains("\t" + login + "\t")) { 
      System.out.println("Это имя пользователя уже занято"); 
      return false; 
     } 
    } 
    users.add(name + "\t" + login + "\t" + password); 
    return true; 
} 
} 
0

最善の解決策は

public class User { 

    Set<UserLogin> users = new HashSet<UserLogin>(); 

    public static void main(String[] arg) throws IOException { 
     BufferedReader bReader =new BufferedReader(new InputStreamReader(System.in)); 
     String name = bReader.readLine(); 
     String login = bReader.readLine(); 
     String password = bReader.readLine(); 
     new User().UserADD(new User(). new UserLogin(name, login, password));     
    } 

    private void UserADD(final UserLogin user) { 

     if (!users.contains(user)) { 
      users.add(user); 
     } else { 
      System.out.println("Это имя пользователя уже занято"); 
     } 
    } 

    public class UserLogin { 

     private String name; 
     private String login; 
     private String pass; 

     public UserLogin(String name, String login, String pass) { 
      this.name = name; 
      this.login = login; 
      this.pass = pass; 
     } 

     public String getName() { 
      return name; 
     } 

     public String getLogin() { 
      return login; 
     } 

     public String getPass() { 
      return pass; 
     } 

     @Override 
     public boolean equals(Object o) { 
      if (this == o) return true; 
      if (o == null || getClass() != o.getClass()) return false; 

      UserLogin user = (UserLogin) o; 

      return !(login != null ? !login.equals(user.login) : user.login != null); 

     } 

     @Override 
     public int hashCode() { 
      return login != null ? login.hashCode() : 0; 
     } 
    } 
} 
0

になりありがとうございましたが、問題が残りました。 2番目のユーザーに最初にユーザー名を入力しようとすると、プログラムはそれを静かに受け入れ、制限を無視して画面上の警告が表示されません。私はすべてのオプションを試しました。

関連する問題