黑马程序员技术交流社区

标题: 字符串逆序 求改正 [打印本页]

作者: 花开花落总相似    时间: 2013-5-3 21:07
标题: 字符串逆序 求改正
本帖最后由 花开花落总相似 于 2013-5-3 21:54 编辑

/*
   给定一个字符串,将字符串逆序输出。

*/
import java.io.BufferedReader;      
import java.io.InputStreamReader;
import java.io.IOException;


public class Test{

        public static void main(String[]args){
                Test t = new Test();
                String s = t.output();
                System.out.println(s);
                String s2 = t.setsort(s);
                System.out.println(s2);
        
        }

        public String output(){          // 输入一个字符串
                System.out.println("请输入一个字符串");
                String s = null;
                try{
                        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
                        s = bf.readLine();
                }
                catch(IOException io){
                        io.printStackTrace();
                        }
                return s;
        }

        public String setsort(String s){     //对字符串进行逆序
                String s1 = null;
                for(int i = s.length(); i>=0; i--){
                        char c = s.charAt(i);
                        s1 = s.concat(c);   //这一行 报错  
                }
                return s1;
        }
}
38行报错   很郁闷啊 突然就搞不懂了
作者: 殇_心。    时间: 2013-5-3 21:25
s1 = s.concat(c);   //这一行 报错  
这个是因为concat这个方法的参数是String类型。
略微修改了下:
s1 = s.concat(c+"");//用""+c把c转换成String  
作者: 孙宁    时间: 2013-5-3 21:38
  1. public String setsort(String s){     
  2.              String s1 ="";//不能为null
  3.              for(int i = s.length()-1; i>=0; i--){//i作为索引,最大值是s.length()-1
  4.                      char c = s.charAt(i);
  5.                      s1 += c;//concat(String str)传入的是字符串,这里是字符
  6.              }
复制代码

作者: 花开花落总相似    时间: 2013-5-3 21:40
殇_心。 发表于 2013-5-3 21:25
s1 = s.concat(c);   //这一行 报错  
这个是因为concat这个方法的参数是String类型。
略微修改了下:

     嗯 好吧  本来我想强转的 但是报错 我写完就不知道怎么弄了  忘记还可以这样搞了  谢谢啦  
作者: 花开花落总相似    时间: 2013-5-3 21:40
尹桥印 发表于 2013-5-3 21:18
这样改你试试,应该可以

  嗯 等一下试试看
作者: hou604720966    时间: 2013-5-3 21:47
你这个有两个错:
第一个:for(int i = s.length(); i>=0; i--){   char c = s.charAt(i);     这个循环取值会越界的
第二个:s1 = s.concat(c);    concat方法的参数是String型的,你这个是char的,   concat是将指定字符串连接到此字符串的结尾,你这个只能输出 源字符串+源字符串的第一个字符
程序引用一楼的!
作者: 花开花落总相似    时间: 2013-5-3 21:50
孙宁 发表于 2013-5-3 21:38

  为空 应该没问题   在output方法里面定义的那个 常量可以正常使用 系统不会报错  也能正常运行
作者: 李慧声    时间: 2013-5-3 21:55
是的 就像板凳说的s1只能为"",不能为null,不然打印出来的结果会在前面多一个null出来
其实你也可以一用一个数组去模拟
就是把你charAt的结果放在一个数组中,最后new String(数组)就可以了
  1.         public String setsort(String s){     //对字符串进行逆序
  2.                 char[] arr = new char[s.length()];
  3.                 for(int i = s.length()-1; i>=0; i--){
  4.                         //将每一个字符保存在数组中
  5.                         arr[s.length() - 1 - i] = s.charAt(i);
  6.                 }
  7.                 return new String(arr);
  8.         }
复制代码

作者: hou604720966    时间: 2013-5-3 21:55
尹桥印 发表于 2013-5-3 21:50
呃,我怎么感觉没有越界呢?能详细说说么。

打个比方s变量的值为qwe,呢么他的长度是3,char c = s.charAt(3); 就越界了!   
作者: hou604720966    时间: 2013-5-3 21:59
尹桥印 发表于 2013-5-3 21:58
我看明白了,是楼主的代码有错,不是我的。。

嗯是的了
作者: 花开花落总相似    时间: 2013-5-3 22:09
尹桥印 发表于 2013-5-3 21:50
呃,我怎么感觉没有越界呢?能详细说说么。

   你写下来就知道了  运行下来会报错




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