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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 花开花落总相似 中级黑马   /  2013-5-3 21:07  /  1695 人查看  /  14 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 花开花落总相似 于 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行报错   很郁闷啊 突然就搞不懂了

评分

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

查看全部评分

14 个回复

正序浏览
尹桥印 发表于 2013-5-3 21:50
呃,我怎么感觉没有越界呢?能详细说说么。

   你写下来就知道了  运行下来会报错
回复 使用道具 举报
尹桥印 发表于 2013-5-3 21:58
我看明白了,是楼主的代码有错,不是我的。。

嗯是的了
回复 使用道具 举报
尹桥印 发表于 2013-5-3 21:50
呃,我怎么感觉没有越界呢?能详细说说么。

打个比方s变量的值为qwe,呢么他的长度是3,char c = s.charAt(3); 就越界了!   
回复 使用道具 举报
是的 就像板凳说的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.         }
复制代码
回复 使用道具 举报
孙宁 发表于 2013-5-3 21:38

  为空 应该没问题   在output方法里面定义的那个 常量可以正常使用 系统不会报错  也能正常运行
回复 使用道具 举报
你这个有两个错:
第一个:for(int i = s.length(); i>=0; i--){   char c = s.charAt(i);     这个循环取值会越界的
第二个:s1 = s.concat(c);    concat方法的参数是String型的,你这个是char的,   concat是将指定字符串连接到此字符串的结尾,你这个只能输出 源字符串+源字符串的第一个字符
程序引用一楼的!

评分

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

查看全部评分

回复 使用道具 举报
尹桥印 发表于 2013-5-3 21:18
这样改你试试,应该可以

  嗯 等一下试试看
回复 使用道具 举报
殇_心。 发表于 2013-5-3 21:25
s1 = s.concat(c);   //这一行 报错  
这个是因为concat这个方法的参数是String类型。
略微修改了下:

     嗯 好吧  本来我想强转的 但是报错 我写完就不知道怎么弄了  忘记还可以这样搞了  谢谢啦  
回复 使用道具 举报
  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.              }
复制代码

评分

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

查看全部评分

回复 使用道具 举报
s1 = s.concat(c);   //这一行 报错  
这个是因为concat这个方法的参数是String类型。
略微修改了下:
s1 = s.concat(c+"");//用""+c把c转换成String  

评分

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

查看全部评分

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