所以我已经学习了Java的基础知识,并且我正在练习一些新手项目。我目前在做这个项目: http://codingbat.com/prob/p123384
我不知道为什么我的代码不起作用:
public class main {
public static void main(String[] args) {
System.out.println(frontBack("java"));
}
public static String frontBack(String str) {
if (str.length() < 1) {
return str;
} else if (str.length() >= 2) {
char a = str.charAt(0);
char b = str.charAt(str.length() - 1);
str.replace(a, b);
}
return str;
}
}
它会运行,但它不会将前面的字符与后面的字符交换。我查看了网站的解决方案,它确实对我有意义..也更简单但为什么我的代码不起作用?另外我不认为我正确使用return关键字...
答案 0 :(得分:0)
因为你没有用新值设置str。
函数replace返回一个String。
public class main {
public static void main(String[] args) {
System.out.println(frontBack("java"));
}
public static String frontBack(String str) {
if (str.length() < 1) {
return str;
} else if (str.length() >= 2) {
char a = str.charAt(0);
char b = str.charAt(str.length() - 1);
str = str.replace(a, b);
//str = str.replace(b, a); maybe you need it
}
return str;
}
}
答案 1 :(得分:0)
简单地
return b + str.substring(1, str.length() - 1) + a;
str.replace(...)返回一个字符串,所以(即使它是正确的)你将失去返回值。
替换方法替换字符的相干匹配序列,但您需要在两个位置替换不同的值。替换对最后一个字符不好,因为这个字符可能出现在较早的位置,所以你也要替换它。
通常,你还必须考虑str.length()== 1;在这里它恰好通过并返回原始字符串。但最好在代码中明确这一点:
if( str.length() <= 1 ){
return str;
} else {
char a = str.charAt(0);
char b = str.charAt(str.length() - 1);
return b + str.substring(1, str.length() - 1) + a;
}
记住:一个String对象,一旦设置,就不能通过任何应用它的方法来改变。您可以将新的String对象分配给包含String引用的变量。