Java 登录顺序的逻辑
我有一个代码,打开一个文件,检查用户提供的用户名或密码是否在文件中,但代码显示成功登录,而实际上没有。我是初学者,所以我需要一些帮助来修复错误,并使用基本的初学者编码,没有复杂的库或方法 我得到以下输出,这表明我的程序没有按照我希望的方式运行:Java 登录顺序的逻辑,java,file,class,Java,File,Class,我有一个代码,打开一个文件,检查用户提供的用户名或密码是否在文件中,但代码显示成功登录,而实际上没有。我是初学者,所以我需要一些帮助来修复错误,并使用基本的初学者编码,没有复杂的库或方法 我得到以下输出,这表明我的程序没有按照我希望的方式运行: USERNAME OR PASSWORD INCORRECT! TRY AGAIN SUCCESSFUL, YOU ARE LOGGED IN! 代码如下: package login; import java.io.File; import jav
USERNAME OR PASSWORD INCORRECT! TRY AGAIN
SUCCESSFUL, YOU ARE LOGGED IN!
代码如下:
package login;
import java.io.File;
import java.io.FileNotFoundException;
public class Main {
public static void main(String[] args) throws FileNotFoundException {
// TODO code application logic here.
File file = new File("users.txt");
Login newLogin = new Login(file);
newLogin.checkLogin("word", "wordet");
}
}
package login;
import java.io.File;
//library for file exception
import java.io.FileNotFoundException;
import java.util.ArrayList;
//library for opening file
import java.util.Scanner;
public class Login {
private File file;
private ArrayList<String> usernames;
private ArrayList<String> passwords;
private int tries = 3;
public Login(File file) {
this.file = file;
this.usernames = new ArrayList<String>();
this.passwords = new ArrayList<String>();
this.tries = 3;
}
public void readLines() throws FileNotFoundException{
ArrayList<String> lines = new ArrayList<String>();
Scanner input = new Scanner(this.file);
while (input.hasNextLine()){
lines.add(input.nextLine());
}
input.close();
usernames.clear();
passwords.clear();
for(int i = 0; i < lines.size(); i++) {
if (i %2 == 0) {
usernames.add(lines.get(i));
} else {
passwords.add(lines.get(i));
}
}
}
public void checkLogin(String user, String pass) throws FileNotFoundException{
this.readLines();
if (tries == 0){
System.out.println("YOU HAVE TRIED TOO MANY TIMES!");
} else {
for(int i = 0; i < this.usernames.size(); i++) {
if (this.usernames.contains(user)) {
if (passwords.get(i).equals(pass)) {
System.out.println("SUCCESSFUL, YOU ARE LOGGED IN!");
} else {
System.out.println("USERNAME OR PASSWORD INCORRECT! TRY AGAIN");
tries--;
}
}
}
}
}
}
包登录;
导入java.io.File;
导入java.io.FileNotFoundException;
公共班机{
公共静态void main(字符串[]args)引发FileNotFoundException{
//这里的TODO代码应用程序逻辑。
File File=新文件(“users.txt”);
Login newLogin=新登录(文件);
checkLogin(“word”、“wordet”);
}
}
软件包登录;
导入java.io.File;
//用于文件异常的库
导入java.io.FileNotFoundException;
导入java.util.ArrayList;
//用于打开文件的库
导入java.util.Scanner;
公共类登录{
私有文件;
私有ArrayList用户名;
私有ArrayList密码;
私有int=3;
公共登录(文件){
this.file=文件;
this.usernames=new ArrayList();
this.passwords=new ArrayList();
这1.3=3;
}
public void readLines()引发FileNotFoundException{
ArrayList行=新的ArrayList();
扫描仪输入=新扫描仪(此.file);
while(input.hasNextLine()){
line.add(input.nextLine());
}
input.close();
usernames.clear();
密码。清除();
对于(int i=0;i
问题似乎就在这段代码中
for(int i = 0; i < this.usernames.size(); i++) {
if (this.usernames.contains(user)) {
if (passwords.get(i).equals(pass)) {
System.out.println("SUCCESSFUL, YOU ARE LOGGED IN!");
} else {
System.out.println("USERNAME OR PASSWORD INCORRECT! TRY AGAIN");
tries--;
}
}
}
逻辑是:
枚举所有用户。
如果当前用户名与测试用户名匹配,请检查密码。
如果提供的密码与记录相符,请登录用户。否则,登录失败。假设您有两个
“达斯·维德”
用户,一个密码为“卢克”,另一个密码为“莱娅”。
另外,假设您只想接受密码为“Luke”,而密码为“Leia”的“Darth Vader”
在文本文件中位于第一位
注意,对于代码,您将在for
循环中输入if(this.usernames.contains(user))
对于密码错误的“Darth Vader”
,因此,由于他没有正确的密码,它将显示“用户名或密码不正确!请重试”
(您输入else)
现在,按照相同的逻辑,在的迭代中,我们有了“Darth Vader”,使用良好的密码,您将显示“成功,您已登录!”
这是一个解决方案:
public void checkLogin(String user, String pass) throws FileNotFoundException{
this.readLines();
if (tries == 0){
System.out.println("YOU HAVE TRIED TOO MANY TIMES!");
return;
}
int i = 0;
for(; i < this.usernames.size(); i++) {
if (!this.usernames.contains(user))
continue;
if (passwords.get(i).equals(pass)) {
System.out.println("SUCCESSFUL, YOU ARE LOGGED IN!");
break;
}
}
if (i == this.usernames.size())
System.out.println("USERNAME OR PASSWORD INCORRECT! TRY AGAIN");
}
public void checkLogin(String user,String pass)抛出FileNotFoundException{
这是readLines();
如果(尝试==0){
System.out.println(“您尝试了太多次!”);
返回;
}
int i=0;
对于(;i
请注意,我允许自己更改代码中的某些内容,例如删除
else
,在if(trys==0)
之后,这会使代码看起来更干净(更易于调试)。您遇到了什么错误。您能显示文件的内容吗?请在标题中更具描述性!
public void checkLogin(String user, String pass) throws FileNotFoundException{
this.readLines();
if (tries == 0){
System.out.println("YOU HAVE TRIED TOO MANY TIMES!");
return;
}
int i = 0;
for(; i < this.usernames.size(); i++) {
if (!this.usernames.contains(user))
continue;
if (passwords.get(i).equals(pass)) {
System.out.println("SUCCESSFUL, YOU ARE LOGGED IN!");
break;
}
}
if (i == this.usernames.size())
System.out.println("USERNAME OR PASSWORD INCORRECT! TRY AGAIN");
}