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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. package com.itheima;

  2. import java.util.Scanner;

  3. public class Test1 {

  4.         /**
  5.          * 1.判断一个字符串是否是对称字符串
  6.      *例如"abc"不是对称字符串,"aba"、"abba"、"aaa"、"mnanm"是对称字符串
  7.      *思路:先将字符串拆分为一个字符数组
  8.          */
  9.         public static void main(String[] args) {
  10.                 //从控制台结收用户输入的一个字符串
  11.       Scanner sc=new Scanner(System.in);
  12.      
  13.       System.out.println("请输入一个字符串:");
  14.       String str=sc.next();
  15.       //将字符串转换为一个字符数组
  16.         char [] charstr=str.toCharArray();
  17.         int j=1;//定义一个变量,赋值为1
  18.          for(int i=0;i<charstr.length;i++)//循环字符数组
  19.          {
  20.                  if(charstr[i]==charstr[charstr.length-j])//当数组的第一个元素和最后一个元素相等的时候
  21.                  {
  22.                          if(i==j||i+j==charstr.length)//判断数组是否循环到最后
  23.                          {
  24.                                  System.out.println("这个字符串是对称字符串");//打印输出是对称字符串
  25.                                  return;//结束程序
  26.                          }
  27.                  }
  28.                  j++;//变量自加,判断第二位,和倒数第二位字符
  29.          }
  30.          //最后输出不是对称字符串
  31.          System.out.println("这个字符串不是对称字符串");
  32.         
  33.         }

  34. }
复制代码

当输入的字符串是“aa”的时候就判断失败了,大家能跟我说下为什么吗?

评分

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

查看全部评分

7 个回复

正序浏览
我也要站楼主一席
StringBuilder sb = new StringBuilder();
for(int i =  str.length - 1; i <= 0; i++){
    sb.append( str.charAt(i) );
}

if(str.equals(sb.toString()))
{
sop("是对称字符串");
}else{
sop("不是对称字符串");
}
回复 使用道具 举报
我把你的for循环语句该了下
for(int i=0;i<charstr.length;i++)
      {
                 if(charstr[i]==charstr[charstr.length-j])
                 {
                         if(i<charstr.length-j)
                         {
                                 j++;
                                 continue;
                         }
                        System.out.println("这个字符串是对称字符串");
                        return;
                 }
                break;
                 
         }
         System.out.println("这个字符串不是对称字符串");
        
        }
回复 使用道具 举报
谢谢大家谢谢大家
回复 使用道具 举报
自己的方法两种:
      1.利用equals和StringBuffer的reverse()判断
      if(str.equals(new StringBuffer(str).reverse().toString())){
                return true;
     }
     2.利用递归
     boolean isPalindrome(String str, int start, int end){
             if(start == end ){
                  return true;
            }
            if(str.chartAt(start) == str.charAt(end)){
                  return isPalindrome(str, start+1, end-1);
            }
            return false;
     }

评分

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

查看全部评分

回复 使用道具 举报
我有一个思路不懂行不行
1、字符串变成字符数组
2、将字符数组变成变成List集合
3、反转List集合(asList())
4、将反转后的变回字符数组,在变回字符串(Collections.reverse())
5、用equals()判断字符串内容是否相同,相同就是对称的不同就是不对称

评分

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

查看全部评分

回复 使用道具 举报
//                 if(charstr.length==2)
//                 {
//                        if(charstr[0]==charstr[1])
//                        {
//                                System.out.println("这个字符串是对称字符串");//打印输出是对称字符串
//                                   return;//结束程序
//                        }
//                 }

但谁有更简单一点的方法

评分

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

查看全部评分

回复 使用道具 举报
我找到问题的所在了?在for循环中加入

评分

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

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马