英文:
Need help intgerating a while loop in my java program. Want the program to handle incorrect input better
问题
这是迄今为止的代码,仅在输入匹配的用户名和密码时(显示欢迎消息)起作用。
我不确定如何集成一个 while 循环,如果 usernameInput 字符串与 username 字符串不匹配,它会阻止用户进入密码阶段,并反复循环,直到输入正确的用户名为止。然后,我希望对于 passwordInput 字符串也是同样的操作,直到它与密码字符串匹配为止。想法是使程序能够一遍又一遍地循环,直到用户输入了正确的用户名和密码。
【注意:我从基本了解Python的角度进入Java,所以一切可能会有点混乱和低效】
import java.util.Scanner;
public class Login {
public static void main(String[] args) {
String username, usernameInput, password, passwordInput;
username = "KenBoneL0ver";
password = "KenBone4Life";
Scanner myObj1 = new Scanner(System.in);
while (true) {
System.out.println("请输入您的用户名:");
usernameInput = myObj1.nextLine();
if (!usernameInput.equals(username)) {
System.out.println("用户名不正确,请重试:");
} else {
break; // 退出循环,进入密码阶段
}
}
while (true) {
System.out.println("请输入正确的密码:");
passwordInput = myObj1.nextLine();
if (!passwordInput.equals(password)) {
System.out.println("密码不正确,请重试:");
} else {
System.out.println("您已成功登录!");
break; // 登录成功,退出循环
}
}
myObj1.close();
}
}
感谢您的任何帮助!
英文:
This is my code so far that only works (displays the welcome message) when both a matching username and password have been entered.
I am unsure how to integrate a while loop that stops the user from progressing to the password stage if the usernameInput string does not match the username string, and loops over and over until the correct username has been entered. Then after I would like the same thing for the passwordInput string until it matches the password string. The idea is to have the program be able to loop over and over until the correct username AND password have been entered by the user.
[NOTE: I'm coming into java from a very basic knowledge of python, so everything may be a little disordered and inefficient]
import java.util.Scanner;
public class Login {
public static void main(String[] args) {
String username,usernameInput, password, passwordInput;
username= "KenBoneL0ver";
password= "KenBone4Life";
Scanner myObj1= new Scanner(System.in);
System.out.println("Please enter your username:");
usernameInput= myObj1.nextLine();
if (!usernameInput.equals(username)) {
System.out.println("Incorrect username. Please try again:");
}
else {
System.out.println("Now please enter the correct password:");
}
Scanner myObj2= new Scanner(System.in);
passwordInput= myObj2.nextLine();
if (!passwordInput.equals(password)) {
System.out.println("Incorrect password. Please try again:");
}
else {
System.out.println("You have successfully logged in!");
}
myObj1.close();
myObj2.close();
}
}
Thanks for any help!
答案1
得分: 0
import java.util.Scanner;
public class Login {
public static void main(String[] args) {
Scanner myObj1 = null;
try {
String username, usernameInput, password, passwordInput;
username = "KenBoneL0ver";
password = "KenBone4Life";
myObj1 = new Scanner(System.in);
while (true) {
System.out.println("Please enter your username:");
usernameInput = myObj1.nextLine();
if (!usernameInput.equals(username)) {
System.out.println("Incorrect username. Please try again:");
continue;
}
break;
}
while (true) {
System.out.println("Now please enter the correct password:");
passwordInput = myObj1.nextLine();
if (!passwordInput.equals(password)) {
System.out.println("Incorrect password. Please try again:");
continue;
} else {
System.out.println("You have successfully logged in!");
break;
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (myObj1 != null) {
myObj1.close();
}
}
}
}
输出:
Please enter your username:
test
Incorrect username. Please try again:
Please enter your username:
KenBoneL0ver
Now please enter the correct password:
test
Incorrect password. Please try again:
Now please enter the correct password:
KenBone4Life
You have successfully logged in!
英文:
Can you please check if are you looking for something like this?
import java.util.Scanner;
public class Login {
public static void main(String[] args) {
Scanner myObj1 = null;
try {
String username, usernameInput, password, passwordInput;
username = "KenBoneL0ver";
password = "KenBone4Life";
myObj1 = new Scanner(System.in);
while (true) {
System.out.println("Please enter your username:");
usernameInput = myObj1.nextLine();
if (!usernameInput.equals(username)) {
System.out.println("Incorrect username. Please try again:");
continue;
}
break;
}
while (true) {
// Scanner myObj2 = new Scanner(System.in);
System.out.println("Now please enter the correct password:");
passwordInput = myObj1.nextLine();
if (!passwordInput.equals(password)) {
System.out.println("Incorrect password. Please try again:");
continue;
} else {
System.out.println("You have successfully logged in!");
break;
}
}
// myObj2.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (myObj1 != null) {
myObj1.close();
}
}
}
}
Output:
Please enter your username:
test
Incorrect username. Please try again:
Please enter your username:
KenBoneL0ver
Now please enter the correct password:
test
Incorrect password. Please try again:
Now please enter the correct password:
KenBone4Life
You have successfully logged in!
答案2
得分: 0
你可以使用 while 循环:
while (someBooleanCondition) {
statement(s);
}
当两个条件都为真(密码和用户名),布尔条件会中断 while 循环,并告诉用户他们已成功登录。
英文:
You can use a while loop:
while (someBooleanCondition) {
statement(s);
}
When both conditions are true (password and username) then the boolean condition breaks the while loop and tells the user they have successfully logged in.
答案3
得分: 0
你可以在 while
循环内部检查条件时使用赋值运算符:
while (!username.equals(usernameInput = scan.nextLine()))
。这样你就不需要额外的布尔变量或者 break
/continue
语句来实现必要的流程。
关于使用 Scanner
的附加注释:
1)没有必要创建单独的实例来输入用户名和密码。
2)很高兴看到你关心了关闭两个 Scanner
实例。然而,使用 try-with-resources
结构可以确保实现了 AutoCloseable
接口的资源会被自动关闭。
话虽如此,代码可以重写如下:
import java.util.Scanner;
public class Login {
public static void main(String[] args) {
String
username = "user",
password = "pswd",
usernameInput,
passwordInput;
try (Scanner scan = new Scanner(System.in)) {
System.out.println("Please enter your username:");
while(!username.equals(usernameInput = scan.nextLine())) {
System.out.println("Incorrect username. Please try again:");
}
System.out.println("Now please enter the correct password:");
while(!password.equals(passwordInput = scan.nextLine())) {
System.out.println("Incorrect password. Please try again:");
}
System.out.println("You have successfully logged in!");
}
}
}
英文:
You can use assignment operator when checking the condition inside while
:
while (!username.equals(usernameInput = scan.nextLine()))
. Then you won't need any extra boolean variables and/or break
/continue
statements to implement necessary flow.
Aside comments related to the use of Scanner
:
- there's no need to create a separate instance to input username and password.
- It's good to see that you cared for closing both
Scanner
instances. However, usingtry-with-resources
construction guarantees that the resource implementingAutoCloseable
interface will be closed automatically.
That being said, the code may be rewritten as follows:
import java.util.Scanner;
public class Login {
public static void main(String[] args) {
String
username = "user",
password = "pswd",
usernameInput,
passwordInput;
try (Scanner scan = new Scanner(System.in)) {
System.out.println("Please enter your username:");
while(!username.equals(usernameInput = scan.nextLine())) {
System.out.println("Incorrect username. Please try again:");
}
System.out.println("Now please enter the correct password:");
while(!password.equals(passwordInput = scan.nextLine())) {
System.out.println("Incorrect password. Please try again:");
}
System.out.println("You have successfully logged in!");
}
}
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论