Java

Java списочный массив ArrayList

в методе register(); я заношу данные в списочные массивы, но в методе login(); их не получается проверить, только если внести данные из метода login(); Как проверять данные которые я занес из метода register();

import java.sql.*;
import java.util.*;
public class User
{
ArrayListuser=new ArrayList();
ArrayListpass=new ArrayList();
ArrayListname=new ArrayList();

public void userList()
{

System.out.println("[======================]");
System.out.println("[.СПИСОК. ПОЛЬЗОВАТЕЛЕЙ.]");
if (user.size() == 0)
System.out.println("[null]");
else
{
for (int i=0;i < user.size() || i < pass.size() || i < name.size();i++)
{

System.out.println("[login:" + user.get(i) + "][password:" + pass.get(i) + "][name:" + name.get(i) + "]");
}
}
System.out.println("[======================]");
}
public void register()
{

Scanner scn=new Scanner(System.in);
String login,password,names;

System.out.print("[Ваше имя: ");
names = scn.nextLine();
System.out.print("[Придумайте логин: ");
login = scn.nextLine();
System.out.print("[Придумайте пароль: ");
password = scn.nextLine();

name.add(names);
user.add(login);
pass.add(password);

}
public void login()
{

Scanner scn=new Scanner(System.in);
String log,passw;

System.out.print("[Введите логин: ");
log = scn.nextLine();
System.out.print("[Введите пароль: ");
passw = scn.nextLine();

if (user.contains(log) && pass.contains(passw))
{
if (user.indexOf(log) == pass.indexOf(passw))
{
System.out.print("[Добро пожаловать, " + name.get(user.indexOf(log)) + "]\n");
}
}
else
{
System.out.println("[Введены неправельные данные!]");
}
}
}
Ой как все плохо-то... Я даже не знаю с чего начать, эээ а обязательно делать на разных списках, всмысле чтобы был отдельный список для логинов, отдельный для паролей?
Если по существу - на скрине, КАЖДЫЙ вход в метод логин, добавляет НОВОГО юзера, логин и пасс в списки.
В текстовке такого нету, было бы неплохо увидеть весь список программы, т. к. есть подозрение что вы для регистрации используете один объект Юзер, а для логина - другой, и их списки user pass name - разные.
Кроме того всё написано "не так", класс Юзер какой-то неправильный чтоли. Он одновременно и сущность (юзер) и хранилище для этих самых юзеров, и контроллер для них же... Так вобщем-то не делается :( Нет, можно конечно, но управлять всем этим очень сложно.
Собственно к моему глубокому сожалению вынужден констатировать что ваш код, не будем говорить что он плохо написан, скажем что он 100% рабочий. Метод ниже (вписаный в класс юзера) 100% отрабатывает:
public static void main(String[] args) {
User user=new User();
user.user.add("user");
user.pass.add("pass");
user.name.add("name");
System.out.println("List:");
user.userList();
System.out.println("Register:");
user.register();
System.out.println("List:");
user.userList();
System.out.println("Login:");
user.login();
}

Из чего я делаю вывод что вы закидываете (регистрируете) пользователей в один объект класса User, а выдрать их же пытаетесь из другого. В качестве быстрого решения проблемы, могу порекомендовать сделать поля:
ArrayList user=new ArrayList();
ArrayList pass=new ArrayList();
ArrayList name=new ArrayList();
статичными, т. е. записать их в виде:
static ArrayList String user=new ArrayList();
static ArrayList String pass=new ArrayList();
static ArrayLis String name=new ArrayList();
УА
Ульяна Анфалова
4 644
Лучший ответ
Ульяна Анфалова Собственно вариант как это делать "правилно", ну или принято считать что так правильно:
1. Класс Юзер, содержит только поля:
String login;
String pass;
String name;
Ну и геттеры и сетеры под них.
2. Класс UserStorage - Это хреновина, читай класс, который умеет хранить, доставать пользователей и искать а есть ли такой пользователь с именем и паролем.
public class UserStorage{
private static List users=new ArrayList();
public static void createUser(User user){
users.add(user)
}
public staticUser getUserByLoginPass(String login, String pass){
for (User user : users){
if (user.getLogin().equals(login) && user.getPass().equals(pass){
return user;
}
}
return null;
}
}
Ну и некий контроллер, который будет регать и логинить юзерей: ( to be contin
Ульяна Анфалова public class UserController{
public void register(){
System.out.println("Register:");
Scanner scn=new Scanner(System.in);
String login,password,names;

System.out.print("[Ваше имя: ");
names = scn.nextLine();
System.out.print("[Придумайте логин: ");
login = scn.nextLine();
System.out.print("[Придумайте пароль: ");
password = scn.nextLine();
User user=new User(names,login,password);
UserStorage.createUser(user);
}
public User login(){
// в следующем каменте
Ульяна Анфалова public User login(){
Scanner scn=new Scanner(System.in);
String log,passw;

System.out.print("[Введите логин: ");
log = scn.nextLine();
System.out.print("[Введите пароль: ");
passw = scn.nextLine();
User user=UserController.getUserByLoginPass(log,passw);
if (user==null){
System.out.println("[Введены неправельные данные!]");
} else {
System.out.println("[Добро пожаловать, " + user.getName());
}
}
ばかにつける薬はない。。。。
AT
Agali Tehmezov
63 304
запустил у себя, все работает. Я может не понял вопроса

А так, убедительная для вас прозьба - создайте класс User и в нем поля username, login, password

А то запаритесь работать со списками.
Олег Королев
Олег Королев
8 005