所有!我正在完成这些练习,并提出了一个看起来很简单的解决方案。但是我从编译器中得到了一些奇怪的行为。当然,还有其他解决方案,我可以轻松找到一个解决方案。但是,我真的很想知道导致这种现象的原因。我的策略是使用for循环遍历提供的字符串的副本。if语句检查以确保剩余至少三个字符,并传递该字符,然后按问题要求的顺序进行交换。问题出在最后,通过简单的方法删除了字符串的前三个字符:
变量= variable.substring(3);
编译器将引发“;预期的行号”错误。
完整代码如下。提前致谢!
public String oneTwo(String str) {
String answer = "";
String working = str;
for(int i = 0; i < str.length(); i += 3){
if(i + 3 > working.length()){break;}
answer += working.charAt(1);
answer += working.charAt(2);
answer += working.charAt(0);
working = working,substring(3);
}
return answer;
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
你好!我注意到你的代码中存在一些错误,这可能是导致编译器报错的原因。让我们一步步来分析和修正这些问题:
循环条件错误:你的循环条件是 i < working.length()
,但你实际上并没有在循环内部使用 i
变量。看起来你想要遍历整个字符串,但这里的实现方式并不正确。
字符拼接问题:你在给 answer
赋值时,每次都是用新的字符覆盖了之前的内容,而不是拼接到一起。你应该使用字符串的 concat
方法或者 +=
操作符来累加字符。
逗号使用错误:在 working = working,substring(3);
这一行,你误用了逗号 ,
,应该是点号.
来调用方法。
提前退出循环的需求:你试图通过 if (i + 3 > working.length()){break;}
来避免数组越界,但实际上这个判断应该放在循环开始前进行,以确保至少有三个字符可以操作。
返回值问题:最后,你只返回了单个字符 answer
,而实际上应该是整个处理过的字符串。
基于以上分析,下面是修改后的代码示例:
public String oneTwo(String str) {
StringBuilder answer = new StringBuilder();
String working = str;
// 确保字符串至少有三个字符
if (working.length() < 3) {
return str; // 或者根据需求处理较短字符串的情况
}
for(int i = 0; i < working.length(); i += 3) {
// 检查剩余部分是否足够交换,避免越界
if (i + 3 <= working.length()) {
answer.append(working.charAt(i + 1));
answer.append(working.charAt(i + 2));
answer.append(working.charAt(i));
} else {
// 处理不足三个字符的尾部,这里直接附加剩余字符即可,或按需处理
break;
}
}
return answer.toString();
}
这段代码首先检查字符串长度是否满足条件,然后使用 StringBuilder
来高效地构建结果字符串,同时修复了循环逻辑和方法调用的错误。希望这能帮助到你!