A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 呆呆怪兽 中级黑马   /  2015-3-31 21:21  /  526 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

我写了一个判断字符串对称的程序,代码如下:
1、public static void main(String[] args) {
2、                Scanner sc = new Scanner(System.in);
3、                System.out.println("请输入一个字符串:");
4、                char c[] = sc.nextLine().toCharArray();
5、//                System.out.println(c);
6、                StringBuffer sb = new StringBuffer();
7、//                System.out.println(sb.append(c).reverse());
8、                if (c.equals (sb.append(c).reverse())) {
9、                        System.out.println("您输入的字符串是对称的。");
10、                } else {
11、                        System.out.println("您输入的字符串是不对称的。");
12、                }
13、        }

程序的问题就是不管输入什么都判断是不对称。我在代码第5行和第7行打印出来输入结果和转化结果,结果显示都一样,可是还是判断不对称,我想是不是SringBuffer接收的结果出了问题还是char[]数组的问题,但是不明白为什么,还请大家帮忙分析一下原因。

我自己把类型都转化成String类型就没有问题了,代码如下:
public static void main(String[] args) {
                Scanner sc = new Scanner(System.in);
                System.out.println("请输入一个字符串:");
                char c[] = sc.nextLine().toCharArray();
//                System.out.println(c);
                StringBuffer sb = new StringBuffer();
//                System.out.println(sb.append(c).reverse());
                String str2 = sb.append(c).reverse().toString();
                if (new String(c).toString().equals (str2)) {
                        System.out.println("您输入的字符串是对称的。");
                } else {
                        System.out.println("您输入的字符串是不对称的。");
                }
        }

这是为什么?这也是病急乱投医把问题解决了,但是不明白~~

4 个回复

倒序浏览
一个字符数组,一个StringBuffer,怎么equals()?
回复 使用道具 举报
lrd7512369 发表于 2015-3-31 21:29
一个字符数组,一个StringBuffer,怎么equals()?

这是不是可以理解为两个不同的对象,然后不管值是什么都不会equal返回true?
回复 使用道具 举报
/* 判断一个字符串是否是对称字符串,例如"abc"不是对称字符串,"aba"、"abba"、"aaa"、"mnanm"是对称字符串*/
import java.io.*;
class Test5 {
       
        public static void main(String[]args)throws IOException{
                BufferedReader buffer=new BufferedReader(new InputStreamReader(System.in));//键盘读入字符串
                String line=null;
                while((line=buffer.readLine())!=null){
                        if("over".equals(line)){//输入over停止
                                break;
                        }
                        boolean flag=true;
                        char []arr=line.toCharArray();//将读入的line字符串转化成字符数组
                        for(int i=0;i<arr.length/2;i++){
                        if(arr[i]!=arr[arr.length-1-i]){
                                flag=false;
                                break;
                        }
                               
                }       
                if(flag==false)
                        System.out.println("该字符串不是对称字符串");
                else
                        System.out.println("该字符串是对称字符串");
}
}
}
我的做下参考
回复 使用道具 举报
这个c是数组和集合比较肯定是false呀
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马