You need to enable JavaScript to run this app. 求助:使用if语句的Java正多边形面积计算器变量无法解析报错
优惠活动
大模型
产品
解决方案
定价
更多

求助:使用if语句的Java正多边形面积计算器变量无法解析报错

代码编译报错与逻辑问题定位

你遇到的所有cannot be resolved to a variable类报错,全部来自以下几个明确的代码问题:

  • 变量作用域错误(核心报错原因)
    Java中由大括号包裹的代码块,内部声明的变量仅在当前大括号范围内有效。你之前把存边长的length变量声明在边数校验的else块内部,块外的所有分支判断、计算逻辑都访问不到这个变量;同时面积计算结果calculation仅在第一个判断分支里做了声明,后续分支赋值、最终输出语句都因为超出作用域/未声明无法访问,自然触发解析错误。
  • 分支判断逻辑错位
    项目要求是根据输入的边数匹配对应面积公式,但你写的判断分支全部拿存边长的length变量去和3、4、5、6做比较,相当于把边长当边数选公式,哪怕编译能通过,计算结果也是完全错误的。
  • API拼写与语法错误
    Java标准输出方法是System.out.println(),你把方法名写成了首字母大写的Println,不符合方法命名规则,会直接触发编译错误;同时你创建了两个独立的Scanner实例,不仅冗余,还容易触发输入流读取异常。
  • 输出拼接错误
    最终打印语句里你直接把Scanner对象sidelength拼到了输出字符串中,实际应该拼接存边长的数值变量length;而且边数校验不通过时,你仅打印了错误提示,没有终止程序,后续代码仍会执行,触发更多无意义报错。

修正后的可运行版本
import java.util.Scanner;

public class RegularShapeArea {

    public static void main(String[] args) {
        // 统一使用一个Scanner实例读取所有用户输入
        Scanner inputScanner = new Scanner(System.in);

        System.out.println("How many sides does the shape have (between 3 and 6)? ");
        // 边数为整数类型,直接接收整数输入
        int sides = inputScanner.nextInt();

        // 边数范围校验
        if ((sides <3) || (sides >6)) { 
            System.out.println("The value entered was not between 3 & 6.");
            // 校验不通过直接关闭输入流并终止程序,不执行后续计算
            inputScanner.close();
            return;
        }

        // 边长、面积变量声明在所有代码块外层,保证全流程可访问
        System.out.println("How long is each side? ");
        double length = inputScanner.nextDouble();
        double calculation;

        // 根据边数匹配对应面积公式,符合项目要求的if分支规则
        if (sides == 3) {
            calculation = (Math.sqrt(3)/4) * (length *length);
        }
        else if (sides == 4) {
            calculation = (length * length);
        }
        else if (sides == 5) {
            calculation = (Math.sqrt(5 * (5 + 2 * (Math.sqrt(5)))) * length * length) / 4;
        }
        else {
            // 前面已完成边数范围校验,剩余合法值仅为6
            calculation = ((3 * Math.sqrt(3) * (length * length)) / 2);
        }
        
        // 修正println的拼写错误,正确拼接实际数值
        System.out.println("The surface area of a shape with " + sides + " sides, each of length " + length + " is " + calculation);
        
        inputScanner.close();
    }
}

改动说明
  • 把length、calculation、Scanner实例全部声明在代码块的最外层,彻底解决变量作用域导致的无法解析报错
  • 把原来错误的“拿边长判断分支”全部替换为“拿边数sides匹配公式”,完全匹配项目要求
  • 保留了你原来核对过的所有面积计算公式,没有改动逻辑
  • 修正了Println的拼写错误,移除了冗余的Scanner实例
  • 边数非法时直接终止程序,避免无意义的后续执行
  • 修正了输出语句中错误拼接Scanner对象的问题,直接拼接实际的边长、面积数值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.02 09:54:09