字符串的反转功能,判断是否相等功能

又出错啦,看看我这次又做错了啥吧

题目

请定义一个方法用于判断一个字符串是否是对称的字符串,并在主方法中测试方法。例如:“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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值