Codewars基础运算类测试报错:return失效与输入流问题求助
问题分析与修复方案
为什么会报错?
你完全搞错了basicMath方法的设计逻辑:
- 题目要求这个方法接收传入的操作符和两个数值参数,直接返回计算结果,但你在方法里用
Scanner从控制台读取输入,把传入的参数全覆盖了。 - Codewars的JUnit测试是直接传参调用方法,不会给你提供控制台输入,所以
Scanner.nextLine()会因为找不到输入行抛出异常,就是你看到的"No line found"。 - 本地能跑是因为你手动在IDE控制台输入了数据,测试环境没这个交互环节。
修复后的代码
public class BasicOperations { public static Integer basicMath(String op, int v1, int v2) { switch (op) { case "+": return v1 + v2; case "-": return v1 - v2; case "*": return v1 * v2; case "/": return v1 / v2; default: return null; // 处理未知操作符,可选 } } }
优化点说明
- 删掉了多余的
Scanner和静态变量finalResult,直接在每个case分支返回结果,代码更清爽高效。 - 加了
default分支,防止遇到未知操作符时没有返回值的情况,让代码更健壮。
额外提醒
Codewars的题目一般都是让你实现纯逻辑方法:接收参数、处理逻辑、返回结果,不需要自己处理输入输出——测试用例已经帮你把参数传进来,还会校验你的返回值对不对,你只需要专注写计算逻辑就行。
内容的提问来源于stack exchange,提问作者Swansea
相关产品推荐
相关产品推荐

