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

Java方法调用及返回值问题求助:无法获取CalculateRoomCost计算结果

代码错误分析与修正

你的代码存在以下几个问题:

  • 方法调用语法错误:main方法里调用calculateRoomCost时,写了calculateRoomCost( int nights);,这不符合Java语法。调用方法不需要在参数前加类型声明,而且此处的nights变量根本未定义。

  • 返回类型不匹配:calculateRoomCost声明返回double类型,但实际返回的是int类型的nightsTotal,编译会直接报错。要么把方法返回类型改成int,要么将返回值强制转换为double。

  • 参数冗余+变量名混乱:calculateRoomCost的参数nights被用来存储房间类型选择,但nights字面意思是住宿天数,完全混淆了逻辑。而且这个参数根本没用,房间类型是在方法内通过输入获取的,直接删掉参数即可。

  • 重复创建Scanner对象:main方法已经创建了Scanner实例,方法内再次新建属于资源浪费,还可能引发输入异常,应该复用同一个Scanner。

  • 核心逻辑缺失:当前代码只计算了单晚费用,没有让用户输入住宿天数,总费用应该是单晚价格乘以住宿天数,这也是变量名混乱导致的逻辑漏洞。


修正后的代码示例:

import java.util.Scanner;

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

        System.out.println("Welcome to Likuliku Lagoon Resort - Malolo Island, Fiji.");
        
        // 获取用户住宿天数
        System.out.print("Please enter the number of nights: ");
        int nights = input.nextInt();
        
        // 获取单晚房价并计算总费用
        double totalCost = calculateRoomCost(input) * nights;

        System.out.println("The cost will be: $" + totalCost);
        input.close();
    }

    // 复用main中的Scanner实例,返回对应房型的单晚价格
    public static double calculateRoomCost(Scanner input) {
        double nightlyRate;

        System.out.println("1 : Standard Room no view $100/night");
        System.out.println("2 : Luxury Room with view $200/night");
        System.out.println("3 : Luxury Room with Balcony $300/night");
        System.out.print("Please enter your choice: ");
        int roomChoice = input.nextInt();

        if (roomChoice == 1)
            nightlyRate = 100.0;
        else if (roomChoice == 2)
            nightlyRate = 200.0;
        else
            nightlyRate = 300.0;

        return nightlyRate;
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 14:40:29