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

如何结合Scanner类与构造器更新Java类的Setter密码(Pwd)

问题修复与代码修正

原代码存在的问题

  • 大小写敏感错误:Account类的verifyPwd方法中,成员变量名为Pwd(大写开头),但代码中写成了this.pwd(小写p),Java对大小写敏感,这会导致编译失败。
  • 对象创建语法错误:驱动类中Account a=new Account(int Pwd);是非法写法,创建对象时需传入具体的初始密码值,而非类型声明。
  • 实例方法调用错误:setPwd是Account类的实例方法,必须通过Account对象(如a.setPwd(...))调用,直接调用会报错。
  • 流程逻辑缺失:未设置初始密码,也没有合理的用户交互引导,无法完成密码验证与更新的完整流程。

修正后的完整代码

Account类

class Account {
    private int pwd; // 统一用小写开头,符合Java命名规范

    // 构造器:初始化初始密码
    Account(int initialPwd) {
        this.pwd = initialPwd;
    }

    // 修改密码方法:验证旧密码后更新为新密码
    public void setPwd(int oldPwd, int newPwd) {
        if (this.pwd == oldPwd) {
            this.pwd = newPwd;
            System.out.println("密码修改成功");
        } else {
            System.out.println("旧密码不匹配,修改失败");
        }
    }

    // 密码验证方法
    public boolean verifyPwd(int inputPwd) {
        return this.pwd == inputPwd; // 简化逻辑,直接返回判断结果
    }
}

SbiDriver驱动类

import java.util.Scanner;

class SbiDriver {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        // 1. 设置初始密码(可根据需求改为用户输入)
        System.out.println("请设置初始密码:");
        int initialPwd = scanner.nextInt();
        Account account = new Account(initialPwd);

        // 2. 引导用户输入旧密码和新密码
        System.out.println("请输入旧密码:");
        int oldPwd = scanner.nextInt();
        System.out.println("请输入新密码:");
        int newPwd = scanner.nextInt();

        // 3. 调用修改密码方法
        account.setPwd(oldPwd, newPwd);

        scanner.close();
    }
}

修正说明

  1. 命名规范调整:将成员变量改为pwd(小写开头),符合Java驼峰命名规范,避免大小写混淆。
  2. 修复构造器调用:创建Account对象时传入具体的初始密码值,确保对象初始化正确。
  3. 修正方法调用:通过Account对象account调用setPwd方法,符合实例方法的调用规则。
  4. 完善交互流程:添加初始密码设置步骤,引导用户依次输入旧密码和新密码,流程更清晰合理。
  5. 简化验证逻辑:将verifyPwd方法的判断逻辑简化为直接返回布尔值,代码更简洁。

内容的提问来源于stack exchange,提问作者Karthi Keyan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 17:50:27