Java不同方法间如何共享变量?计算圆面积时area变量赋值无效求助
问题根因
你遇到的输出异常核心是**变量遮蔽(Variable Shadowing)**问题,同时代码缺了Scanner类的导入声明:
- 你已经在类维度定义了静态成员变量
radius和area,但在circleInput()方法中又写了double radius = sc.nextDouble();,这相当于在方法内新建了一个局部同名变量,输入的半径只会存入这个生命周期仅在方法内的局部变量,类层面的静态radius根本没被赋值,默认值保持为0.0 - 同理
processing()方法中的double area = ...也是新建了局部同名变量,计算结果没有存入类层面的静态area,最终输出的就是静态变量的默认值0.0
修复方案
方案1:快速适配原有写法,直接给静态成员赋值
去掉方法内的局部变量声明,直接操作类静态成员即可:
import java.util.Scanner; // 补上缺失的Scanner导入 public class AreaCircle { static double radius; static double area; public static void circleInput() { Scanner sc = new Scanner(System.in); System.out.println("Radius: "); // 去掉前面的double,直接给类静态成员赋值 radius = sc.nextDouble(); sc.close(); } public static void processing() { // 去掉前面的double,直接给类静态成员赋值 area = Math.PI * (radius * radius); } public static void output() { System.out.println("Area: "+area); } public static void main(String args[]) { circleInput(); processing(); output(); } }
方案2:更规范的传参写法(推荐)
避免滥用全局静态变量,通过方法返回值、参数传递实现数据流转,耦合度更低可维护性更好:
import java.util.Scanner; public class AreaCircle { // 输入方法返回读取到的半径 public static double circleInput() { Scanner sc = new Scanner(System.in); System.out.println("Radius: "); double radius = sc.nextDouble(); sc.close(); return radius; } // 处理方法接收半径作为入参,返回计算后的面积 public static double processing(double radius) { return Math.PI * radius * radius; } // 输出方法接收面积作为入参打印 public static void output(double area) { System.out.println("Area: "+area); } public static void main(String args[]) { double inputRadius = circleInput(); double calculatedArea = processing(inputRadius); output(calculatedArea); } }
内容的提问来源于stack exchange,提问作者Jordan Lee
相关产品推荐
相关产品推荐

