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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 乞文超 中级黑马   /  2012-4-22 00:13  /  2009 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

床前明月_   ,疑是地_霜,举头望_月,低头思故_。
A.光   上   明   乡
B.上   明   乡   光
C.乡   上   明   光
D.光   乡   上   明

请你编写一函数,随机扣掉每一句的一个字,然后生成3个错误选项,一个正确选项,选项的字必须是诗里所缺的字。请写出数据结构,算法。


用java做下,我也考虑一下。

评分

参与人数 1黑马币 +5 收起 理由
职业规划-刘倩老师 + 5 赞一个!

查看全部评分

4 个回复

倒序浏览
本帖最后由 徐晓磊 于 2012-4-22 04:24 编辑
  1. import java.util.regex.*;
  2. import java.util.*;

  3. public class AutoSelectString {    //http://bbs.itheima.com/thread-12655-1-1.html的题目
  4.         
  5.         private String poems;
  6.         private Vector<String> poemsPart;// 存放每一句
  7.         private Vector<Integer> poemsNumber;//存放随即产生的每一句空白处的索引
  8.         
  9.         public AutoSelectString(String poems){
  10.                 this.poems = poems;
  11.                 poemsPart = new Vector<String>();
  12.                 poemsNumber = new Vector<Integer>();
  13.                 autoMaker();
  14.                 show();
  15.         }
  16.       
  17.        //使用正则表达式
  18.         public void autoMaker(){
  19.                 Pattern pattern = Pattern.compile("\\S*\\s");
  20.                 Matcher matcher = pattern.matcher(poems);
  21.                 while(matcher.find()){
  22.                         poemsPart.add(matcher.group());
  23.                 }
  24.                 for(int i=0;i<poemsPart.size();i++){
  25.                         String str =  poemsPart.get(i);
  26.                         int random = new Random().nextInt(str.length()-2);
  27.                         poemsNumber.add(random);
  28.                 }
  29.                         
  30.         }
  31.          //输出
  32.         public void show(){
  33.                 char[] chars = new char[poemsPart.size()];
  34.                 for(int i=0;i<chars.length;i++){
  35.                         chars[i] = poemsPart.get(i).charAt(poemsNumber.get(i));
  36.                         System.out.print(poemsPart.get(i).replace(chars[i],'_'));
  37.                 }
  38.                 System.out.println("");
  39.                 //下面的输出没有做到能够对于任意的诗句进行选项排列组合输出,只能只对于诗句是四言的,可以通过添加排列组合算法实现模块化输出四言,八言,词等
  40.                 System.out.println("A : "+chars[0] + " " +chars[1]+ " " +chars[2]+ " " +chars[3]);
  41.                 System.out.println("B : "+chars[1] + " " +chars[3]+ " " +chars[2]+ " " +chars[0]);
  42.                 System.out.println("C : "+chars[2] + " " +chars[1]+ " " +chars[0]+ " " +chars[1]);
  43.                 System.out.println("D : "+chars[3] + " " +chars[2]+ " " +chars[1]+ " " +chars[0]);               
  44.         }

  45.         
  46.         
  47.         public static void main(String[] args){
  48.                 //诗句格式是每一句结尾加一个空格
  49.                 new AutoSelectString("床前明月光, 疑是地上霜, 举头望明月, 低头思故乡。 ");

  50.         
  51.         }
  52. }

复制代码
以下是运行截图

捕获1.PNG (4.62 KB, 下载次数: 35)

捕获1.PNG

捕获2.PNG (4.45 KB, 下载次数: 40)

捕获2.PNG

捕获3.PNG (4.26 KB, 下载次数: 29)

捕获3.PNG

评分

参与人数 1技术分 +1 收起 理由
职业规划-刘倩老师 + 1 赞一个!

查看全部评分

回复 使用道具 举报
这么有意思,这个是哪的题啊。。。
回复 使用道具 举报
时艳军 发表于 2012-4-22 09:50
这个题挺有意思的还,但是我运行了好多次,结果好像是随机产生的,但是正确的答案都是A选项,可不可以再加 ...

我在代码中注释的那一块说了不能模块化输出,大家将那一块代码改一改吧
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马