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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 左耳的鱼 中级黑马   /  2013-6-25 16:06  /  1222 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 左耳的鱼 于 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

评分

参与人数 1技术分 +1 收起 理由
Just_Only + 1 赞一个!

查看全部评分

5 个回复

倒序浏览
公司面试还是黑马的面试啊?
回复 使用道具 举报
将'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 16:53
公司面试还是黑马的面试啊?

上课给的题做
回复 使用道具 举报

  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 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的缓冲区大小,而不会包含所传的字符,所以上面的输出结果就很好理解了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马