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

如何在if语句中结合字符串与整数?Java方法返回值错误排查

问题分析与解决

错误根源

你碰到的"void无法转换为java.lang.String"错误,本质是yesornodisability()方法被定义为void(无返回值),但你在swimmingprice()里试图把它的调用结果赋值给String类型变量disabled——Java不允许这种操作,因为void方法不会返回任何值,自然没法赋值给字符串变量。

修复方案

1. 修正yesornodisability()方法

把方法返回类型从void改为String,并在方法末尾返回用户输入的结果:

public static String yesornodisability() {
    String disabled;
    Scanner scanner = new Scanner(System.in);
    System.out.println("Are you registered disabled(Yes / No)? ");
    disabled = scanner.nextLine();
    return disabled; // 返回用户输入的字符串
}

2. 修复swimmingprice()的无限递归问题

你的swimmingprice()最后写了return swimmingprice();,这会导致方法不断调用自身,陷入无限递归,最终触发栈溢出异常。应该返回计算好的总价:

public static int swimmingprice() {
    int userAge = age();
    int totalCost = total();
    String disabled = yesornodisability();
        
    if (userAge <= 18) {
        totalCost = totalCost / 2;
    } else if (userAge >= 65) {
        totalCost = totalCost - 3;
    } else if ("Yes".equalsIgnoreCase(disabled)) { // 用equalsIgnoreCase兼容大小写输入
        totalCost = totalCost - 4;
    } else {
        totalCost = 10;
    }
    
    System.out.println("The swimming price for you is " + totalCost + " pounds.");
    return totalCost; // 返回计算后的总价,而非递归调用自身
}

额外优化提示

  • 用equalsIgnoreCase()判断字符串匹配,能兼容用户输入"yes"、"YES"等不同大小写的情况,提升交互容错性。
  • 可以考虑复用Scanner实例,避免每次调用方法都创建新对象(当前写法也能运行,但复用更高效)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 19:30:41