黑马程序员技术交流社区

标题: 面试改错题 [打印本页]

作者: 左耳的鱼    时间: 2013-6-25 16:06
标题: 面试改错题
本帖最后由 左耳的鱼 于 2013-6-25 20:02 编辑

import java.util.Random;

public class Test {
   private static Random r = new Random();
   public static void main(String[] args) {
      StringBuffer word = null;
      switch(r.nextInt(2)) {
          case 1:  word = new StringBuffer('P');
                  break;
          case 2:  word = new StringBuffer('G');
                  break;
          default: word = new StringBuffer('M');
                  break;
      }
      word.append('a');
      word.append('i');
      word.append('n');
      System.out.println(word);
   }
}
怎么改,能输出Main
作者: 蚂蚁搬家    时间: 2013-6-25 16:53
公司面试还是黑马的面试啊?
作者: liujkh123    时间: 2013-6-25 17:11
将'm'改为"M"

  1. import java.util.Random;

  2. public class Test {
  3.    private static Random r = new Random();
  4.    public static void main(String[] args) {
  5.       StringBuffer word = null;
  6.       switch(r.nextInt(2)) {
  7.           case 1:  word = new StringBuffer("P");
  8.                   break;
  9.           case 2:  word = new StringBuffer("G");
  10.                   break;
  11.           default: word = new StringBuffer("M");
  12.                   break;
  13.       }
  14.       
  15.       word.append('a');
  16.       word.append('i');
  17.       word.append('n');
  18.       System.out.println(word);
  19.    }
  20. }
复制代码
至于new StringBuffer('M')到底什么用法,晚上回宿舍研究下再告诉楼主哈;
作者: 左耳的鱼    时间: 2013-6-25 18:51
蚂蚁搬家 发表于 2013-6-25 16:53
公司面试还是黑马的面试啊?

上课给的题做
作者: 无气打火机    时间: 2013-6-25 19:38

  1. import java.util.Random;

  2. public class Test {
  3.    private static Random r = new Random();
  4.    public static void main(String[] args) {
  5.       StringBuffer word = null;
  6.       switch(r.nextInt(1)) {
  7.           case 1:  word = new StringBuffer("P");
  8.                   break;
  9.           case 2:  word = new StringBuffer("G");
  10.                   break;
  11.           default: word = new StringBuffer("M");
  12.                   break;
  13.       }
  14.       
  15.       word.append('a');
  16.       word.append('i');
  17.       word.append('n');
  18.       System.out.println(word);
  19.    }
  20. }
复制代码
楼主其实要输出Main很简单,只要把switch后面的那个随机常量改成r.nextInt(1),单引号改成双引号就可以了
因为他随机出现的数是不包含尾的,也就是说你要r.nextInt(2)里面是2的话随机出来的数只是0,1.要是改成r.nextInt(1)之后随机出来的数就只有0,0不满足上面两个case,所以就会输出default下面的代码了,至于该双引号是因为StringBuffer的构造方法里面根本就没有char类型的构造方法,所以传个char类型的字符进去是不行的。
作者: liujkh123    时间: 2013-6-25 20:57
liujkh123 发表于 2013-6-25 17:11
将'm'改为"M"至于new StringBuffer('M')到底什么用法,晚上回宿舍研究下再告诉楼主哈; ...

给楼主科普补充下
  1. public class TestStringBuffer {
  2.         public static void main(String[] args){
  3.                 StringBuffer sb = new StringBuffer('m');
  4.                 sb.append("abc");
  5.                 System.out.println(sb);
  6.                 System.out.println(sb.capacity());
  7.         }

  8. }
复制代码
输出结果是

abc
109

这是为什么呢,因为传字符的构造函数回把字符变量提升为int类型,插文档可以知道带int类型的构造函数是会指定StringBuffer的缓冲区大小,而不会包含所传的字符,所以上面的输出结果就很好理解了。




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