You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Scanner输入转为String?我的Java登录验证代码运行异常

解决Java登录验证中Scanner输入无法正确匹配的问题

问题根源

  1. 局部变量无法持久化:你的ScannerClass中,main()和main1()方法里的UserID、pwd是局部变量,方法执行结束后就会被回收,类本身没有保存这些输入值。
  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 04:52:40