3

我正在 CodingBat.com (extraFront) 上解决一个基本的 Java 字符串问题。

任务是,给定一个任意长度的字符串,返回重复三遍的前两个字符。第一个示例是我最终直观地完成的操作:

public String extraFront(String str) {

  if (str.length() <= 2){
    String front = str;
  }else{
    String front = str.substring(0,2);
  }
  return front+front+front;
}

这给了我一个错误,前面无法解决。我猜我需要在循环外定义变量,所以我将代码更改为以下代码,它可以正常工作:

public String extraFront(String str) {

  String front;

  if (str.length() <= 2){
    front = str;
  }else{
    front = str.substring(0,2);
  }
  return front+front+front;
}

令我困惑的是,为什么这会有所不同,因为无论如何都要声明变量,不是吗?这是 CodingBat 处理代码的一个特点,还是实际上是一个错误?如果是,为什么这个代码不正确?如果它不正确,是不是风格不好?

4

2 回答 2

4

令我困惑的是,为什么这会有所不同,因为无论如何都要声明变量,不是吗?

这是范围界定的问题。变量仅在声明它的块中可见。这与 CodingBat 无关——它是 Java 语言的一部分。从JLS 的第 6.3 节

声明的范围是程序的区域,在该区域内,声明所声明的实体可以使用简单名称来引用,前提是它是可见的(第 6.4.1 节)。
...
块中局部变量声明的范围(第 14.4 节)是声明出现的块的其余部分,从它自己的初始化程序开始,并在局部变量声明语句的右侧包括任何进一步的声明符。

我还敦促您了解条件运算符,它可以在以下情况下提供帮助:

String front = str.length() <= 2 ? str : str.substring(0, 2);
于 2013-04-16T15:09:18.190 回答
1

block当您在 a中声明局部变量时variablescoping根据Java language

你可以看到一个简单的视频:)

一个变量只能从它的声明到声明它的大括号的末尾才可用。变量有效的程序文本区域称为其范围。

块和语句

于 2013-04-16T15:10:14.863 回答