无法将String作为String数组返回:HackerRank Encircular问题报错求助
解决HackerRank Encircular问题的返回类型报错
嘿,我一眼就瞅到你遇到的问题根源啦!HackerRank的Encircular问题要求你的方法返回单个String(比如"Yes"或"No"),但你现在把方法定义成返回String[](字符串数组)了,这就是报错的直接原因。我给你一步步说怎么修复:
核心问题修正步骤
- 修改方法返回类型:把
static String[] find(String[] commands)改成static String find(String[] commands),这是最关键的一步,直接对齐题目要求的返回类型。 - 修正数组长度调用错误:你代码里写的
commands.length()是错误的!数组的长度是通过.length属性获取的,不是方法调用(.length()是字符串的专属方法),所以要改成commands.length。 - 调整返回逻辑:Encircular问题核心是判断机器人是否进入循环,最终要返回单个字符串结果(比如"Yes"或"No"),你需要在方法末尾根据判断逻辑返回对应的单个值,而不是数组。
修改后的完整示例代码
public class Encircular { static String find(String[] commands) { int x = 0; int y = 0; // 用整数表示方向:0=上,1=右,2=下,3=左,比单个布尔值更灵活 int currentDirection = 0; for (int i = 0; i < commands.length; i++) { String cmd = commands[i]; for (char c : cmd.toCharArray()) { switch (c) { case 'G': // 根据当前方向移动坐标 if (currentDirection == 0) y++; else if (currentDirection == 1) x++; else if (currentDirection == 2) y--; else if (currentDirection == 3) x--; break; case 'L': // 左转:方向减1,加4再取模避免负数 currentDirection = (currentDirection - 1 + 4) % 4; break; case 'R': // 右转:方向加1取模 currentDirection = (currentDirection + 1) % 4; break; } } } // 判断是否循环:要么回到原点,要么方向不是初始方向(说明一直在转向) boolean isCircular = (x == 0 && y == 0) || (currentDirection != 0); return isCircular ? "YES" : "NO"; } }
额外说明
如果题目实际要求处理多组测试用例并返回结果数组,那可能是你误解了题目要求,但根据你提到的报错信息(要求返回String的方法定义成返回String数组),显然题目期望的是单个String返回值,上面的修改应该能解决你的问题。
内容的提问来源于stack exchange,提问作者Jackie
相关产品推荐
相关产品推荐

