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

Java自定义Rotor类调用rotate()报cannot find symbol错误如何解决

错误原因

  • 核心是**变量名遮蔽(Name Shadowing)**问题:你定义的构造方法参数String rotor和类的成员变量private String rotor同名,在构造方法的作用域内,未加this修饰的rotor会被编译器识别为局部参数(String类型),而java.lang.String类本身没有rotate()方法,因此触发找不到符号的编译错误。
  • 你自定义的rotate()是Rotor类的实例成员方法,属于当前正在初始化的Rotor对象,需要通过this关键字明确指定调用主体。

修复方案

遵循OOP封装原则,不需要把rotate方法逻辑搬进构造方法,只需要修正调用语法即可,推荐两步优化从根源消除问题:

  1. 修改构造方法的参数名,避免和成员变量重名,消除歧义
  2. 调用自定义方法时加this关键字,明确调用当前实例的成员方法

修复后的完整代码

public class Rotor{
    private String rotor;

    // 参数名修改为inputRotor,避免和成员变量重名
    public Rotor(String inputRotor, char top){
        this.rotor = inputRotor;
        while(this.rotor.charAt(0)!=top){
            // 明确调用当前Rotor实例的rotate方法
            this.rotate();
        }
    }
    //rotates rotor one click clockwise
    public void rotate(){
        this.rotor = this.rotor.substring(this.rotor.length()-1) + this.rotor.substring(0, this.rotor.length()-1);
    }

    public char peek(){
        return rotor.charAt(0);
    }
    public String toString(){
        return rotor;
    }
    public static void main(String[] args){
        Rotor rotor = new Rotor("#GNUAHOVBIPWCJQXDKRYELSZFMT", 'U');
        System.out.println(rotor.toString());
    }
}

运行后输出结果和预期一致:UAHOVBIPWCJQXDKRYELSZFMT#GN

内容的提问来源于stack exchange,提问作者Brigitta Szepesi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 12:24:07