黑马程序员技术交流社区

标题: 怎么会出现异常呢 [打印本页]

作者: gaigai7    时间: 2014-5-7 17:54
标题: 怎么会出现异常呢
class StringTest
{
        public static void main(String[] args)
        {
                String s = "    abcd dert    ";
                 MyTrim(s);
                 System.out.println(reverseString(s));
        //        System.out.println(s);
        }
        public static void MyTrim(String str)
        {
                int start = 0 ,end = str.length()-1;
                while(start <= end && str.charAt(start) == ' ')
                        start++;
                while(start <= end && str.charAt(end) == ' ')
                        end--;
                String s = str.substring(start,end+1);
                System.out.println(s);
        }
        public static String reverseString(String str)
        {
                char[] chs = str.toCharArray();
                reverse(chs);
                return new String(chs);
        }
        public static void reverse(char[] arr)
        {
                for (int start = 0, end = arr.length-1; start < end; start++,end--)
                {
                        swap(arr,start,end);
                }
        }
        public static void swap(char[] arr, int x, int y)
        {
                char temp = arr[x];
                arr[x] = arr[y];
                arr[y] = arr[temp];
        }
}


作者: NewDemo    时间: 2014-5-7 18:05
{:2_34:}先来看异常
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 32
        at day3.Test1.swap(Test1.java:39)
        at day3.Test1.reverse(Test1.java:32)
        at day3.Test1.reverseString(Test1.java:25)
        at day3.Test1.main(Test1.java:9)

ArrayIndexOutOfBoundsException是角标越界异常
再去看at day3.Test1.swap(Test1.java:39),找到代码的39行,发现arr[y] =arr[temp];写错了
改成arr[y] = temp;

所以,楼主必须要学会根据提示的信息去解决问题了。。


作者: z1342802487    时间: 2014-5-7 18:06
你的swap方法写错了,temp 本身就是char可以直接赋值给 arr[y] 。
下面是该更后的swap方法
  1. public static void swap(char[] arr, int x, int y)
  2.         {
  3.                 char temp = arr[x];
  4.                 arr[x] = arr[y];
  5.                 arr[y] = temp;
  6.         }
复制代码

作者: gaigai7    时间: 2014-5-7 21:20
z1342802487 发表于 2014-5-7 18:06
你的swap方法写错了,temp 本身就是char可以直接赋值给 arr[y] 。
下面是该更后的swap方法
...

哦哦   谢谢
作者: 嗯√低调〆    时间: 2014-5-7 21:25
学会调试很重要吧,写程序爆红不可怕,能调过来就好了
作者: yemenglin    时间: 2014-5-7 21:30
用eclipse     一般在编写的时候哪里有问题都会报错,很好用的




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