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

