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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ぺsimon☆ 中级黑马   /  2013-4-23 20:11  /  1971 人查看  /  15 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 ぺsimon☆ 于 2013-4-28 17:39 编辑
  1. /*
  2. 将字符串反转
  3. */

  4. class ResverseTest
  5. {
  6.         public static void main(String[] args)
  7.         {
  8.         String s="abcde";
  9.         resverse(s,0,4);
  10.         }

  11.         public static void resverse(String str,int x,int y)
  12.         {
  13.         char[] ch=str.toCharArray(); //把字符串转为字符数组
  14.         for(int start=x,end=y-1;y>x;x++,y--) //定义for循环
  15.         {
  16.         swap(ch,start,end); //调用函数把位置调换
  17.         }
  18.         System.out.println(new String(ch)); //输出调转后的字符串
  19.         }

  20.         public static void swap(char[] ch,int x,int y) //定义互换位置函数
  21.         {
  22.         char temp=ch[x];
  23.         ch[x]=ch[y];
  24.         ch[y]=temp;
  25.         
  26.         }
  27. }
复制代码
问题:为什么,程序运行没有输出结果?控制台上面什么东西都没有?没有提示错误

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

15 个回复

倒序浏览
class ResverseTest {
        public static void main(String[] args) {
                String s = "abcde";
                resverse(s, 0, 4);
        }

        public static void resverse(String str, int x, int y) {
                char[] ch = str.toCharArray(); // 把字符串转为字符数组

                for (int start = x, end = y - 1; y > x; x++, y--) // 定义for循环
                {
                        swap(x, y, ch);
                }
                System.out.println(new String(ch)); // 输出调转后的字符串
        }

        private static void swap(int x, int y, char[] ch) {
                char temp = ch[x];
                ch[x] = ch[y];
                ch[y] = temp;
        }

       
}
你再自习看看,这样就好了,没问题的

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
for语句中的swap方法应该是这样写的吧:
  1. for(int start=x,end=y-1;y>x;x++,y--)
  2.                 {
  3.                         swap(ch,x,y);
  4.                 }
  5.                 System.out.println(ch);
复制代码
你写的swap(ch,start,end)中的start和end的值在循环中就没有变化,怎么会交换位置呢

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 lipingan0520 于 2013-4-23 20:45 编辑
  1. /*
  2. 将字符串反转
  3. */

  4. class ResverseTest
  5. {
  6.         public static void main(String[] args)
  7.         {
  8.         String s="abcde";
  9.         resverse(s,0,4);
  10.         }

  11.         public static void resverse(String str,int x,int y)
  12.         {
  13.         char[] ch=str.toCharArray(); //把字符串转为字符数组
  14.         for(int start=x,end=y-1;y>x;x++,y--) //定义for循环
  15.         {
  16.         swap(ch,x,y); //调用函数把位置调换 把这里改下swap(ch,x,y);</font>
  17.         }
  18.         System.out.println(new String(ch)); //输出调转后的字符串
  19.         }

  20.         public static void swap(char[] ch,int x,int y) //定义互换位置函数
  21.         {
  22.         char temp=ch[x];
  23.         ch[x]=ch[y];
  24.         ch[y]=temp;
  25.         
  26.         }
  27. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
package cn.joe.io;

/*

将字符串反转

*/

class Test9

{

        public static void main(String[] args)

        {
//                定义一个字符串
                String s = "abcde";

                char[] ch = s.toCharArray(); // 把字符串转为字符数组
//                把数组反转
                resverse(ch);
//                遍历排序
                sort(ch);

        }
//        数组遍历方法
        private static void sort(char[] ch) {
                for (int i = 0; i < ch.length; i++) {
                        char c = ch[i];
//                        输出时把char类型转化为String
                        System.out.print(c+"");
                }
        }
//        数组反转方法
        private static void resverse(char[] ch) {
                for (int x = 0; x < ch.length; x++) {
                        for (int y = x + 1; y < ch.length; y++) {
                                char temp = ch[x];
                                ch[x] = ch[y];
                                ch[y] = temp;
                        }
                }
        }

我自己重新做了你看下,行不行....

}

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
  1. public static void resverse(String str,int x,int y)
  2.         {
  3.         char[] ch=str.toCharArray();
  4.         for(int start=x,end=y-1;end>start;start++,end--) //在这里用的是start和end指针
  5.         {
  6.         swap(ch,start,end);
  7.         }
  8.         System.out.println(new String(ch));
  9.         }
复制代码

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报

  1. <BLOCKQUOTE>
复制代码
package javabean;
class Demo2
{
public static void main(String[] args)
{
  String s = "abcde";
  resverse(s, 0, 4);
}
public static void resverse(String str, int x, int y)
{
  char[] ch = str.toCharArray();
  for (int start = x, end = y - 1; y > x; x++, y--)   {
   swap(ch, start, end);
   System.out.println(start+"--"+end+"换位置");//加上这句话你输出试试

  }
  System.out.println(new String(ch));
}
public static void swap(char[] ch, int x, int y)
{
  char temp = ch[x];
  ch[x] = ch[y];
  ch[y] = temp;
}
}
你i的否循环有问题

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
class ResverseTest
{
        public static void main(String[] args)
        {
        String s="abcde";
        resverse(s,0,4);
        }

        public static void resverse(String str,int x,int y)
        {
        char[] ch=str.toCharArray(); //把字符串转为字符数组
        for(int start=x,end=y;end>start;start++,end--) //这里y不能减一了,因为你定义的y本身就已经是数组的最后一个了,ah[4]。另外应该是start和end的值变化,因为你传的是start和end的值。
        {
        swap(ch,start,end); //调用函数把位置调换
        }
        System.out.println(new String(ch)); //输出调转后的字符串
        }

        public static void swap(char[] ch,int x,int y) //定义互换位置函数
        {
        char temp=ch[x];
        ch[x]=ch[y];
        ch[y]=temp;

        
        }
}
回复 使用道具 举报
在调换位置的时候首先要判断数组下标是否越界,然后根据需要调换的起止位置写for循环,这样代码比较完整。
如果是反转所有字符可以使用StringBuffer 定义字符串,然后调用reverse()方法即可,
如果想要实现某一子串反转,循环部分我觉得应该是这样
for(int i=0;i<(y-x+1)/2;i++)//x、y分别代表要反转的子串起止字符的下标,(x+y+1)/2代表需要交换的次数,
{
char temp = ch[x+i];
ch[x+i]=ch[y-i];
ch[y-i]=temp;
}
这是我个人的看法,希望对你有用

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
class ResverseTest
{
        public static void main(String[] args)
        {
        String s="abcde";
        resverse(s,0,4);
        }

        public static void resverse(String str,int x,int y)
        {
        char[] ch=str.toCharArray(); //把字符串转为字符数组
       for(int start=x,end=y;end>start;start++,end--) //这里y不能减一了,因为你定义的y本身就已经是数组的最后一个了,ah[4]。另外应该是start和end的值变化,因为你传的是start和
                                                                end的值 。                                                   
        {
        swap(ch,start,end); //调用函数把位置调换
        }
        System.out.println(new String(ch)); //输出调转后的字符串
        }

        public static void swap(char[] ch,int x,int y) //定义互换位置函数
        {
        char temp=ch[x];
        ch[x]=ch[y];
        ch[y]=temp;

        
        }
}

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
可以了,谢谢大家
回复 使用道具 举报
肖川 发表于 2013-4-23 20:32
for语句中的swap方法应该是这样写的吧:你写的swap(ch,start,end)中的start和end的值在循环中就没有变化, ...

for循环中调用的swap(ch,start,end);
不是已经把start赋值给x    end赋值给y了吗
回复 使用道具 举报
肖川 发表于 2013-4-23 20:32
for语句中的swap方法应该是这样写的吧:你写的swap(ch,start,end)中的start和end的值在循环中就没有变化, ...

for循环调用swap(ch,start,end)
不是已经默认把start赋值给x      end赋值给y吗
回复 使用道具 举报
楼主你说可以了,那之前不能输出,什么原因,总要交代下吧。
回复 使用道具 举报
本帖最后由 ぺsimon☆ 于 2013-4-24 20:27 编辑
刘渝灵 发表于 2013-4-24 11:29
楼主你说可以了,那之前不能输出,什么原因,总要交代下吧。

嗯,好的
我在for循环外部加多了一条语句:int start,end;
这样就可以了,我想可能是因为在for内定义的start和end只是一个临时变量,值给不了swap();
回复 使用道具 举报
如果问题已解决,请将分类改为已解决,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马