黑马程序员技术交流社区

标题: 帮忙解释一下这段代码 [打印本页]

作者: 20140829    时间: 2014-10-10 14:09
标题: 帮忙解释一下这段代码
  1.         public static void Method2(String a) {
  2.                 String[] str = { "零", "一", "二", "三 ", "四 ", "五 ", "六 ", "七 ", "八 ",
  3.                                 " 九" };
  4.                 StringBuilder sBuilder = new StringBuilder();
  5.                 sBuilder.append(a);
  6.                 for (int i = 0; i < sBuilder.length(); i++) {
  7.                         int t = Integer.parseInt(sBuilder.substring(i, i + 1));
  8.                         sop(str[t]);
  9.                 }
  10.         }
复制代码



作者: 刘家斌    时间: 2014-10-10 14:22
这个是查表法获取数字组合的大写形式,例如“234”获取“二三四”。首先是传入字符串添加到字符串缓冲区,在获取单个字符的字符子串通过Integer的方法获取到int型的数值,作为角标查表获取大写形式,最后打印出来。

作者: 20140829    时间: 2014-10-10 14:26
能重点解释一下for循环里面的内容吗,谢谢
作者: 20140829    时间: 2014-10-10 14:28
刘家斌 发表于 2014-10-10 14:22
这个是查表法获取数字组合的大写形式,例如“234”获取“二三四”。首先是传入字符串添加到字符串缓冲区, ...


能重点解释一下for循环里面的内容吗,谢谢
作者: 默默丶    时间: 2014-10-10 14:30
你这个
  1. import java.util.Scanner;
  2. public class Demo2 {
  3.         public static void main(String[] args)throws Exception{
  4.                 Scanner sn =new Scanner(System.in);
  5.                 intTohanzi(sn);
  6.                
  7.                
  8.         }

  9.         private static void intTohanzi(Scanner sn) {
  10.                 String[] str = {"零","一","二","三","四","五","六","七","八","九"};
  11.                 StringBuffer sb1 = new StringBuffer();
  12.                 StringBuffer sb2 = new StringBuffer();
  13.                 sb1.append(sn.nextInt());
  14.                 for(int i =0;i<sb1.length();i++){
  15.                 int a = Integer.parseInt(sb1.substring(i, i+1));
  16.                 sb2.append(str[a]);               
  17.         }
  18.                 System.out.println(sb2.toString());
  19.         }
  20. }
复制代码
不就是输入一串数字的字符串用汉字返回吗
作者: 刘家斌    时间: 2014-10-10 14:38
20140829 发表于 2014-10-10 14:28
能重点解释一下for循环里面的内容吗,谢谢

for循环里面定义变量初始为0,在 不超过字符串缓冲区内的字符串长度的情况下,从0角标开始截取,因为包含头不包含尾,所以截取的(i,i+1)只是一个i角标的字符子串,在把他转换成int型,用变量记录去查表,如果是1就去1角标的“一”,以此类推分别打印。
作者: 20140829    时间: 2014-10-10 14:38
默默丶 发表于 2014-10-10 14:30
你这个不就是输入一串数字的字符串用汉字返回吗

这个我知道,我要的是解释,能给我重点解释一下for循环里面的东西吗?谢谢
作者: 默默丶    时间: 2014-10-10 15:46
for (int i = 0; i < sBuilder.length(); i++) {
                        int t = Integer.parseInt(sBuilder.substring(i, i + 1));
                        sop(str[t]);
用for循环将缓冲区里面的元素从1到sb.length();
(sBuilder.substring(i, i + 1)这句话是将缓冲区里面的元素一个一个的取出来 因为substring包含头不包含尾
Integer.parseInt 这句话强制将里面的元素转化为Integer类型 ,这句话因为抛异常。因为有可能没输入数字
sop(str[t]); 强转完的元素作为角标将str[]数组中的元素打印出来
作者: 20140829    时间: 2014-10-10 15:48
默默丶 发表于 2014-10-10 15:46
for (int i = 0; i < sBuilder.length(); i++) {
                        int t = Integer.parseInt(sBuil ...

讲的很详细,谢谢
作者: 20140829    时间: 2014-10-10 15:53
默默丶 发表于 2014-10-10 15:46
for (int i = 0; i < sBuilder.length(); i++) {
                        int t = Integer.parseInt(sBuil ...

不过(sBuilder.substring(i, i + 1));这句还是理解不了。
作者: 默默丶    时间: 2014-10-10 16:01
20140829 发表于 2014-10-10 15:53
不过(sBuilder.substring(i, i + 1));这句还是理解不了。

(sBuilder.substring(i, i + 1));
StringBuilder sb =new StringBuilder();这是新建一个缓冲区对象
(sBuilder.substring(i, i + 1));   sb.substring(first,last);这个方法你去查api文档 这是一个用角标去获取
缓冲区元素的一个方法 不过这是方法包含first 不包含last  
例子sb.substring(2,5);  这就是取出sb这个缓冲区内 角标从2到4的元素 不包含5
如果这还不懂的话  我没办法了
作者: 胡述灵    时间: 2015-8-18 22:04
酷酷酷酷酷酷酷酷酷酷酷酷




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