初学者字符串操作

时间:2015-01-20 18:43:02

标签: java

为什么以下代码不适用于此处的问题? http://codingbat.com/prob/p101475

public String frontTimes(String str, int n) {
  if (str.length() < 3) {
     String front = str;
  } else {
     String front = str.substring(0, 3);
  }
  String copies = "";

  while (n > 0) {
     copies = copies + front; 
     n = n - 1;
  }

  return copies;


}

我真的不明白“前面无法解决”错误我正在

5 个答案:

答案 0 :(得分:3)

变量front的范围仅在if / else块内。您可能想尝试在front之前声明变量if,然后在if内进行分配。

答案 1 :(得分:1)

Java中的scope变量仅限于声明变量的大括号集。

如果你声明一个这样的变量:

if (str.length() < 3) {
    String front = str;
}

然后front仅存在于if块的大括号内。

执行此操作时:

else {
   String front = str.substring(0, 3);
}

然后另一个变量(也称为front)存在于else块的大括号内。

但是,如果在if块之前声明变量:

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

然后它在整个方法的范围内(因为这是周围的大括号集合)。

或者,您可以使用ternary operator

简化变量初始化
String front = (str.length() < 3 ? str : str.substring(0, 3));

答案 2 :(得分:0)

您将front声明为if块的局部变量,然后声明为else子句的(另一个)局部变量。您必须在方法块的范围内声明它。

public String frontTimes(String str, int n) {
  String front;
  if (str.length() < 3)
      front = str;
  else 
      front = str.substring(0,3);
  // or shorter, with a ternary 
  // String front = str.length() < 3 ? str : str.substring(0, 3);

  String copies = "";
  while (n > 0) {
     copies = copies + front; 
     n = n - 1;
  }
  return copies;
}

答案 3 :(得分:0)

问题在于范围规则。类似String front的字段仅在其定义的{ }内可见。

我建议您首先尝试在IDE中编译代码,因为这可以帮助您解决这些错误。

您可能会发现此解决方案很有趣。它迭代O(log N)次而不是O(N)次。 (我怀疑它并不是更好,但是以不同的方式来分解问题)

public String frontTimes(String str, int n) {
  if (str.length() > 3) str = str.substring(0, 3);
  StringBuilder sb = new StringBuilder();
  StringBuilder sb2 = new StringBuilder(str);
  while (n > 0) {
     if ((n & 1) == 1)
        sb.append(sb2);
     n /= 2;
     sb2.append(sb2);
  }
  return sb.toString();
}

答案 4 :(得分:0)

请改为尝试:

public String frontTimes(String str, int n) {

  String front;

  if (str.length() < 3) {
     front = str;
  } 

  else {
     front = str.substring(0, 3);
  }

  String copies = "";

  for (int i = 0; i < n; i++) {
    copies += front;
  }

  return copies; 

}