又出错啦,看看我这次又做错了啥吧
题目
请定义一个方法用于判断一个字符串是否是对称的字符串,并在主方法中测试方法。例如:“abcba”、"上海自来水来自海上"均为对称字符串。
这题考察的是字符串的反转功能,判断是否相等功能
我的错误代码
package com.wedu.test.test5;
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入你要判断的字符串:");
String str = sc.next();
method(str);
}
public static void method(String str){
StringBuilder sb = new StringBuilder(str);
if (str.equals(sb.reverse())){
System.out.println("该字符串是对称字符串");
}else {
System.out.println("该字符串不是对称字符串");
}
}
}
运行效果:
请输入你要判断的字符串:
nidayede
该字符串是对称字符串
Process finished with exit code 0
很明显我输入的字符串不是一个对称字符串,为什么还是显示他是一个对称字符串呢?
接下来咱们来分析错误
public static void method(String str){
StringBuilder sb = new StringBuilder(str);
if (str.equals(sb.reverse())){
System.out.println("该字符串是对称字符串");
}else{
System.out.println("该字符串不是对称字符串");
}
}
没错,错误原因在这段代码,我们的判断条件总是显示是对的(因为我们输入不对称的字符串一样显示对称),首先我们知道字符串反转要用到StringBuilder中的reverse()方法,我们就把string类型的str转成了StringBuilder,然后我们就开始比较了str.equals(sb.reverse()),相当于str和sb在比较,这两个字符串类型不同(当使用equals方法比较两个对象时,如果这两个对象的类型不相同,equals方法会直接返回false,表示这两个对象不相等),应该把反转的字符串sb再转回String再比较。还要注意的是
改正后的代码
package com.wedu.test.test5;
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入你要判断的字符串:");
String str = sc.next();
method(str);
}
public static void method(String str){
StringBuilder sb = new StringBuilder(str);
if (str.equals(sb.reverse().toString())){
System.out.println("该字符串是对称字符串");
}else {
System.out.println("该字符串不是对称字符串");
}
}
}
运行结果
请输入你要判断的字符串:
abc
该字符串不是对称字符串
Process finished with exit code 0
请输入你要判断的字符串:
abcba
该字符串是对称字符串
Process finished with exit code 0