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
相关产品推荐
相关产品推荐

