为什么以下代码不适用于此处的问题? 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;
}
我真的不明白“前面无法解决”错误我正在
答案 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;
}