如何将Scanner输入转为String?我的Java登录验证代码运行异常
解决Java登录验证中Scanner输入无法正确匹配的问题
问题根源
- 局部变量无法持久化:你的
ScannerClass中,main()和main1()方法里的UserID、pwd是局部变量,方法执行结束后就会被回收,类本身没有保存这些输入值。 - toString()用法错误:直接调用
ScannerClass对象的toString(),得到的是Java对象的默认字符串(格式为类名@哈希码),完全不是你输入的用户ID或密码,自然无法匹配。
修正方案(两种实现)
方案一:用成员变量+Getter方法存储输入值
首先修改ScannerClass,添加成员变量保存输入内容,并提供Getter方法供外部获取:
import java.util.Scanner; public class ScannerClass { private static Scanner sc = new Scanner(System.in); // 成员变量存储输入的内容 private String inputContent; // 读取用户ID的方法,避免用main作为方法名(易混淆程序入口) public void readUserId() { this.inputContent = sc.nextLine(); } // 读取密码的方法 public void readPassword() { this.inputContent = sc.nextLine(); } // Getter方法,返回存储的输入内容 public String getInputContent() { return inputContent; } }
然后修改Cond类,通过Getter方法获取输入值进行验证:
import java.util.Scanner; public class Cond { static ScannerClass usrIDHandler, pwdHandler; static String correctPass = "123456"; static String correctUsr = "ABCD"; public static void main(String[] args) { System.out.println("Enter UserID: "); usrIDHandler = new ScannerClass(); usrIDHandler.readUserId(); String inputUsr = usrIDHandler.getInputContent(); System.out.println("Enter password: "); pwdHandler = new ScannerClass(); pwdHandler.readPassword(); String inputPwd = pwdHandler.getInputContent(); if (correctUsr.equals(inputUsr) && correctPass.equals(inputPwd)) { System.out.println("You are logged in!"); } else { System.out.println("Please enter correct credentials"); } } }
方案二:让方法直接返回输入字符串(更简洁)
简化ScannerClass,让读取方法直接返回输入的字符串:
import java.util.Scanner; public class ScannerClass { private static Scanner sc = new Scanner(System.in); public String readUserId() { return sc.nextLine(); } public String readPassword() { return sc.nextLine(); } }
对应的Cond类可以简化为:
import java.util.Scanner; public class Cond { static ScannerClass scannerHelper; static String correctPass = "123456"; static String correctUsr = "ABCD"; public static void main(String[] args) { scannerHelper = new ScannerClass(); System.out.println("Enter UserID: "); String inputUsr = scannerHelper.readUserId(); System.out.println("Enter password: "); String inputPwd = scannerHelper.readPassword(); if (correctUsr.equals(inputUsr) && correctPass.equals(inputPwd)) { System.out.println("You are logged in!"); } else { System.out.println("Please enter correct credentials"); } } }
关键说明
- 避免用
main作为自定义方法名,main是Java程序的入口方法,使用它会造成语义混淆。 - 局部变量仅在方法内部有效,若需要外部访问,必须通过成员变量存储或方法返回值的方式传递。
toString()方法默认用于描述对象本身,若没有重写,无法返回业务数据,不要用它来获取输入内容。
内容的提问来源于stack exchange,提问作者Pramod Devrath
相关产品推荐
相关产品推荐

