开发者社区 问答 正文

CodingBat问题字符串2 oneTwo:编译有关简单重新分配变量值的问题消息

所有!我正在完成这些练习,并提出了一个看起来很简单的解决方案。但是我从编译器中得到了一些奇怪的行为。当然,还有其他解决方案,我可以轻松找到一个解决方案。但是,我真的很想知道导致这种现象的原因。我的策略是使用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;
}

展开
收起
垚tutu 2019-12-12 10:01:36 715 分享 版权
阿里云 AI 助理回答

你好!我注意到你的代码中存在一些错误,这可能是导致编译器报错的原因。让我们一步步来分析和修正这些问题:

  1. 循环条件错误:你的循环条件是 i < working.length(),但你实际上并没有在循环内部使用 i 变量。看起来你想要遍历整个字符串,但这里的实现方式并不正确。

  2. 字符拼接问题:你在给 answer 赋值时,每次都是用新的字符覆盖了之前的内容,而不是拼接到一起。你应该使用字符串的 concat 方法或者 += 操作符来累加字符。

  3. 逗号使用错误:在 working = working,substring(3); 这一行,你误用了逗号 ,,应该是点号.来调用方法。

  4. 提前退出循环的需求:你试图通过 if (i + 3 > working.length()){break;} 来避免数组越界,但实际上这个判断应该放在循环开始前进行,以确保至少有三个字符可以操作。

  5. 返回值问题:最后,你只返回了单个字符 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 来高效地构建结果字符串,同时修复了循环逻辑和方法调用的错误。希望这能帮助到你!

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答分类:
问答地址: