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

Java入门作业报错:方法内变量名已定义问题求助

问题排查与解决方案

错误根因

你遇到的是Java的变量重复定义编译错误:getName方法的形参列表里已经定义了名为name的字符串变量,同一个方法的作用域内不允许重复声明同名变量,所以你在方法内部再写String name;就会触发报错。

除此之外你的代码还存在一处隐藏问题:main方法里你定义了String name;后没有初始化就直接传给getName方法,不符合Java语法规范,只是当前编译阶段优先抛出了重复定义的错误,前者修复后这个问题会紧接着触发。

修复方案

这里提供两种可行修复方式,推荐使用第一种,逻辑更简洁合理:

  • 方式一:删除冗余的getName方法形参,本来getName的作用就是读取用户输入返回,不需要接收外部参数
    修复后完整代码:
    import java.util.Scanner;
    public class DebugThree3
    {
       public static void main(String args[])
       {
          String name = getName();
          displayGreeting(name);           
       }
       public static String getName()
       {
          String name;
          Scanner input = new Scanner(System.in);
          System.out.println("Enter name ");
          name = input.nextLine();
          return name;
       }
       public static void displayGreeting(String name)
       {
          System.out.println("Hello, " + name + "!");
       }
    }
    
  • 方式二:保留getName的形参定义,仅删除方法内部重复的String name;声明,同时修复main方法的变量初始化问题
    修复后完整代码:
    import java.util.Scanner;
    public class DebugThree3
    {
       public static void main(String args[])
       {
          String name = ""; // 先完成初始化
          name = getName(name);
          displayGreeting(name);           
       }
       public static String getName(String name)
       {
          Scanner input = new Scanner(System.in);
          System.out.println("Enter name ");
          name = input.nextLine();
          return name;
       }
       public static void displayGreeting(String name)
       {
          System.out.println("Hello, " + name + "!");
       }
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 19:54:03