Сравнение строк Java не соответствует
Ниже моя кодировка:
package functiontest;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;
public class FunctionTest {
public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);
int option=0;
System.out.println("Please enter your position:");
System.out.println("\n\t1.\tAdministrator");
System.out.println("\t2.\tManagement");
System.out.println("\t3.\tClerk");
System.out.println("\t4.\tEngineer");
System.out.println("\t5.\tExit system");
System.out.print("\n\tYour position:\t");
do
{
option = scan.nextInt();
if(option<1 || option > 5) System.out.print("You have enter wrong position" +
"\nPlease choose your position again[1...5]:\t");
}while(option<1 || option > 5);
switch(option)
{
case 1:administrator();break;
case 2:System.exit(0);break;
}
}
public static void administrator()
{
Scanner ascan = new Scanner(System.in);
String username="administrator";
String password="password";
String iusername, ipassword;
do{
System.out.print("Please enter username:\t");
iusername = ascan.nextLine();
System.out.println("Your username:\t" + iusername);
System.out.print("Please enter password:\t");
ipassword = ascan.nextLine();
System.out.println("The password you enter:\t" + ipassword);
if(iusername.equalsIgnoreCase(username) && ipassword.equalsIgnoreCase(password))
{
System.out.println("you have enter wrong username or password");
System.out.println("The system will exit");
System.exit(0);
}
}while(iusername.equalsIgnoreCase(username) && ipassword.equalsIgnoreCase(password));
int option;
System.out.println("Login successful!");
System.out.println("1. \tadd clerk");
System.out.println("2. \tdelete clerk");
System.out.println("3. \tadd engineer");
System.out.println("4. \tdelete engineer");
option = ascan.nextInt();ascan.nextLine();
}
}
во-первых, я назначаю свое имя пользователя и пароль:
String username="administrator";
String password="password";
прочитайте имя пользователя и пароль от ключа пользователя в
iusername = ascan.nextLine();
ipassword = ascan.nextLine();
последний раз сравнивал пароль и имя пользователя:
iusername.equalsIgnoreCase(username) && ipassword.equalsIgnoreCase(password)
вот результат после запуска программы:
run:
Please enter your position:
1. Administrator
2. Management
3. Clerk
4. Engineer
5. Exit system
Your position: 1
Please enter username: administrator
Your username: administrator
Please enter password: password
The password you enter: password
you have enter wrong username or password
The system will exit
BUILD SUCCESSFUL (total time: 22 seconds)
когда я сравниваю имя пользователя и пароль, он всегда говорит, что не совпадает, после того, как я пытаюсь напечатать имя пользователя и пароль, которые я ввожу, я был уверен, что я прав, но программа всегда говорила, что я ввел неправильные имя пользователя и пароль, могу я знаете, где я ошибся?
3 ответа
Посмотри на свой код. Вы сказали: "Если имя пользователя и пароль верны, напечатайте сообщение о том, что они не правы, и выйдите".
Вместо
if(iusername.equalsIgnoreCase(username) && ipassword.equalsIgnoreCase(password))
ты хочешь
if(!iusername.equalsIgnoreCase(username) || !ipassword.equalsIgnoreCase(password))
Ваша цель - напечатать сообщение об ошибке, если имя пользователя или пароль неверны, а не если оба верны.
Вы выходите из цикла в первой итерации. Сравнение работает нормально, но вы говорите программе напечатать сообщение об ошибке, даже если оно правильно.
if(iusername.equalsIgnoreCase(username) && ipassword.equalsIgnoreCase(password))
{
System.out.println("you have enter wrong username or password");
System.out.println("The system will exit");
System.exit(0);
}
Вы, вероятно, хотите
if(!iusername.equalsIgnoreCase(username) || !ipassword.equalsIgnoreCase(password))
Добавить !
s
Редактировать:
Ваше использование цикла БЕСПЛАТНО. Если вы не собираетесь зацикливаться, просто извлеките часть цикла. Если система выходит из-за плохого ввода, какова цель зацикливания?
Все, что вам нужно, это, если вы не хотите, чтобы он зацикливался при действительном вводе и выходил при неверном вводе
System.out.print("Please enter username:\t");
iusername = ascan.nextLine();
System.out.println("Your username:\t" + iusername);
System.out.print("Please enter password:\t");
ipassword = ascan.nextLine();
System.out.println("The password you enter:\t" + ipassword);
if(!iusername.equalsIgnoreCase(username) || !ipassword.equalsIgnoreCase(password))
{
System.out.println("you have enter wrong username or password");
System.out.println("The system will exit");
System.exit(0);
}
Забудьте о петле!