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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 路西法 中级黑马   /  2014-3-12 23:15  /  3576 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

/*

判断一个字符串是否是对称字符串
例如"abc"不是对称字符串,"aba"、"abba"、"aaa"、"mnanm"是对称字符串


*/


class  Text3
{
        public static void main(String[] args)
        {
                String str = "abcdefgfedcba";
               
                cmp();
                 
        }
public static void  cmp()
        {
                boolean result = true;
                int count =(str.length()-1)/2;
                for (int x=0;x<count ;x++ )
                {
                        if(str.charAt(x)!=str.charAt(str.length()-1-x))
               
                                        result = false;
                }
                if(result)
                        System.out.println("该字符串是不对称的");
                else
                        System.out.println("该字符串是对称的");

        }
}


评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

8 个回复

倒序浏览
本帖最后由 梦里花-静 于 2014-3-13 08:55 编辑

在函数中传递一个参数,即String str。且代码应该是这样的才对 之后的判断语句 写错了。
  1. class  Demo2
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 String str = "abcdefgfedcba";
  6.                
  7.                 cmp(str);
  8.                  
  9.         }
  10. public static void  cmp(String str)
  11.         {
  12.                 boolean result = true;
  13.                 int count =(str.length()-1)/2;
  14.                 for (int x=0;x<=count ;x++ )
  15.                 {
  16.                         if(str.charAt(x)!=str.charAt(str.length()-1-x))
  17.                
  18.                             result = false;
  19.                                                 else
  20.                                                         result=true;
  21.                 }
  22.                 if(result)
  23.                         System.out.println("该字符串是对称的");
  24.                 else
  25.                         System.out.println("该字符串是不对称的");

  26.         }
  27. }
复制代码


自己多看看代码 不对了多观察观察

评分

参与人数 1技术分 +1 收起 理由
菜小徐 + 1

查看全部评分

回复 使用道具 举报
上面的代码还是有点问题,可以用String str="abca";验证一下返回结果是“该字符串是对称的”,但"abca"明显是不对称的。
原因是如果str长度为偶数时,上面的cmp(String str)函数少判断了最里面的一对字符是否对称。
修改方法:可以将for循环终止条件写成for (int x=0;x<=count ;x++ ),而不是x<count
或者for循环终止条件不变,而将count赋值成str.length()/2.
class  Text3
{
        public static void main(String[] args)
        {
                String str = "abda";
               
                cmp(str);
                 
        }
public static void  cmp(String str)
        {
                boolean result = true;
                int count =(str.length()-1)/2;
                for (int x=0;x<=count;x++ )
                {
                        if(str.charAt(x)!=str.charAt(str.length()-1-x)){
               
                                        result = false;
                                        break;
                        }
                }
                if(!result)
                        System.out.println("该字符串是不对称的");
                else
                        System.out.println("该字符串是对称的");

        }
}
运行结果就是不对称的。

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 刘一博 于 2014-3-13 09:52 编辑

1.上面代码中cmp()方法中的 int count =(str.length()-1)/2;会出现编译错误,原因是没有定义str变量,需要修改cmp方法的参数列表 cmp(String str)。
2.当传入字符串str为偶数时,此方法失效,需将x<count 改为x<=count
3.最后方法可变的整洁些
  1. public static void  cmp() {
  2.                 int count =(str.length()-1)/2;
  3.                 for (int x=0;x<=count ;x++ ) {               
  4.                      if(str.charAt(x)!=str.charAt(str.length()-1-x)){
  5.                          System.out.println("该字符串是不对称的");
  6.                          return;
  7.                      }
  8.                 }
  9.                 System.out.println("该字符串是对称的");
  10.         }
复制代码

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 luoanjade 于 2014-3-13 00:16 编辑

楼主的错误是,没有给cpm()方法传参,这个方法应该定义为,参数是“一个字符串”的方法。还有下面的打印判断反了。
个人认为楼上的做法是错的。错误的地方是,第19和20行加的else。
因为我们要的是,只要有一个不等,就会false,楼主原来的写法是对的,只是下面的打印判断错了。如果加了那个else,那看一下我下面这个例子,结果会怎么样:
字符串:acddba
第一次判断:a==a,对称,result==true
第二次判断:c!=b,不对称,result==false,此时就应该break了(减少判断次数,省时)。如果加了else,就会出现第三次判断。
第三次判断:d==d,对称,result==true,而这次判断刚好是最后一次,这不就是错误的吗?
所以楼主的代码只要在循环里面,当发现不等时,赋值完后break,然后再将下面打印的两条语句反过来即可,正确代码如下:
  1. class  Demo2
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 String str = "abcdefgfedcba";
  6.                
  7.                 cmp(str);
  8.                  
  9.         }
  10. public static void  cmp(String str)
  11.         {
  12.                 boolean result = true;
  13.                 int count =(str.length()-1)/2;
  14.                 for (int x=0;x<count ;x++ )
  15.                 {
  16.                         if(str.charAt(x)!=str.charAt(str.length()-1-x))
  17.                         {
  18.                             result = false;
  19.                             break;
  20.                         }
  21.                 }
  22.                 if(result)
  23.                         System.out.println("该字符串是对称的");
  24.                 else
  25.                         System.out.println("该字符串是不对称的");

  26.         }
  27. }
复制代码


评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
楼上的代码第14行该改为for(int x=0;x<=count ;x++)
回复 使用道具 举报
:( cmp没有传代码。。 新手。说一个问题可以得到技术分吗? 不知道怎么得呀。
回复 使用道具 举报
我的基础测试好像和你的一样  一点头绪没有
回复 使用道具 举报
  1. package com.itheima;
  2. /*
  3.         判断一个字符串是否是对称字符串
  4.         例如"abc"不是对称字符串
  5.         "aba"、"abba"、"aaa"、"mnanm"是对称字符串
  6. */
  7. import java.util.Scanner;

  8. public class Test2 {

  9.         public static void main(String[] args) {
  10.                 System.out.println("请输入一个字符串:");
  11.                 Scanner sc = new Scanner(System.in);
  12.                 String str = sc.next();
  13.                 duideng(str);
  14.         }
  15.         public static void  duideng(String str) {
  16.         int count =str.length()/2;
  17.         for (int i=0;i<=count ;i++ ) {               
  18.              if(str.charAt(i)!=str.charAt(str.length()-1-i)){
  19.                  System.out.println("该字符串是不对称的");
  20.                  return;
  21.              }
  22.         }
  23.         System.out.println("该字符串是对称的");
  24.                 }
  25. }
复制代码


如果索引值为  int count =str.length()/2;
判断条件就要改为  for (int i=0;i<=count ;i++ )  count 要加=号.
如果索引值为  int count =(str.length()-1)/2;
就不用加.

我这么写没错吧.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马