黑马程序员技术交流社区

标题: 我做了一道题,大家帮我看看问题出在哪里,我感觉思路上是行的通的 [打印本页]

作者: 630681386@qq.co    时间: 2014-2-18 23:05
标题: 我做了一道题,大家帮我看看问题出在哪里,我感觉思路上是行的通的
  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”的时候就判断失败了,大家能跟我说下为什么吗?
作者: 630681386@qq.co    时间: 2014-2-18 23:21
我找到问题的所在了?在for循环中加入
作者: 630681386@qq.co    时间: 2014-2-18 23:22
//                 if(charstr.length==2)
//                 {
//                        if(charstr[0]==charstr[1])
//                        {
//                                System.out.println("这个字符串是对称字符串");//打印输出是对称字符串
//                                   return;//结束程序
//                        }
//                 }

但谁有更简单一点的方法
作者: kevinmesss.tz    时间: 2014-2-18 23:41
我有一个思路不懂行不行
1、字符串变成字符数组
2、将字符数组变成变成List集合
3、反转List集合(asList())
4、将反转后的变回字符数组,在变回字符串(Collections.reverse())
5、用equals()判断字符串内容是否相同,相同就是对称的不同就是不对称

作者: 汪平乐    时间: 2014-2-19 10:01
自己的方法两种:
      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;
     }
作者: 630681386@qq.co    时间: 2014-2-19 11:24
谢谢大家谢谢大家
作者: 夏新¤Amoi    时间: 2014-2-19 22:25
我把你的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("这个字符串不是对称字符串");
        
        }
作者: 山治0712    时间: 2014-2-20 20:58
我也要站楼主一席
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("不是对称字符串");
}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2