20162323周楠 马尔科夫链

20162323周楠 马尔科夫链

需求分析

通过“学习”一篇文章后,随机输出新的文章。

仅考虑英文输入输出

从文件读入待”学习“文章

能处理标点符号(参考材料中有说明)

能控制输出文章的篇幅

通过参数指定输出的单词数

误差控制

生成的语句要能完整结束(比如遇到句号、问号、感叹号等结束标志)。

为了能实现上述条件,允许输出的单词数量误差 ±50。

设计思路

StringTokenizer的用法:去除空格,将各个单词分割出来


BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String str=br.readLine();

StringTokenizer st=new StringTokenizer(str);
        while(st.hasMoreTokens())
        {
//         listtemp.removeAll(listtemp);
//         System.out.println(st.nextToken());
         listtemp.add((String)(st.nextToken()));//将各词暂时放在list中
        }

说明:

stringtokenizer 是java.util的 而streamtokenizer是java.io的。

stringtokenizer的例子1:


import java.util.StringTokenizer;
public class TokenTest
{      public static void main(String args[])
     { 
        String str="aaa,bbb,ccc,dd,ee,eeadsfd";
        String empty="";
        StringTokenizer strTokenizer=new StringTokenizer(str,",");//以逗号为分割符
        while(strTokenizer.hasMoreTokens())
           {
             empty=empty+strTokenizer.nextToken();
            }
       System.out.println(empty);
      }
}

streamtokenizer的例子2:

input.txt内容如下:
hello everybody
today is a good day

提取出"hello"和"day" 2个子串然后写入"output.txt"


import java.io.*;
 
public class Jtest
{
    public static void main(String[] args)
   {
      String find1 = "hello";//欲?取字串
       String find2 = "day";//欲?取字串
       String tmp = null;
      try
     {
        FileReader in = new FileReader("input.txt");
        FileWriter out = new FileWriter("output.txt");
        StreamTokenizer st = new StreamTokenizer(in);
        //使用StreamTokenizer剖析串流
        while(st.nextToken() != StreamTokenizer.TT_EOF)
        {
           if(st.ttype != StreamTokenizer.TT_WORD)
           {
              continue;
           }
          tmp = st.sval;  //获取的当前词
          if(tmp.equals(find1) || tmp.equals(find2))
          {
            out.write(tmp);
            out.write(System.getProperty("line.separator"));//这个是换行
          }
        }
       in.close();
       out.close();
      }
      catch(IOException exp)
      {
         System.out.println("IOException");
      }
  }
}

StreamTokenizer即令牌化输入流的作用是将一个输入流中变成令牌流。令牌流中的令牌实体有三类:单词(即多字符令牌)、单字符令牌和空白(包括Java和C/C++中的说明语句)。
StreamTokenizer类的构造器为: StreamTokenizer(InputStream in)
该类有一些公有实例变量:ttype、sval和nval ,分别表示令牌类型、当前字符串值和当前数字值。当我们需要取得令牌(即HTML中的标记)之间的字符时,应访问变量sval。而读向下一个令牌的方法是调用nextToken()。方法nextToken()的返回值是int型,共有四种可能的返回:  

(1)StreamTokenizer.TT_NUMBER: 表示读到的令牌是数字,数字的值是double型,可以从实例变量nval中读取。

(2)StreamTokenizer.TT_WORD: 表示读到的令牌是非数字的单词(其他字符也在其中),单词可以从实例变量sval中读取。

(3)StreamTokenizer.TT_EOL: 表示读到的令牌是行结束符。

(4)StreamTokenizer.TT_EOF:表示该流已读到尽头。  
开始调用nextToken()之前,要设置输入流的语法表,以便使分析器辨识不同的字符。WhitespaceChars(int low, int hi)方法定义没有意义的字符的范围。WordChars(int low, int hi)方法定义构造单词的字符范围。

hashtable的遍历


     static Hashtable ht=new Hashtable();

     Enumeration en = ht.keys();//hash表的遍历
     while(en.hasMoreElements())
     {
          List li = (List) en.nextElement();
          System.out.print("DEBUG: " + li);//表头
          System.out.print(" = ");
          System.out.println(ht.get(li));//表尾
     }

随机数的产生


Random random = new Random();
System.out.println(20+random.nextInt(81));//生成20-100之间的随机数

编写过程记录

PSP2.1 Personal Softwore Process Stage 预计耗时(分钟) 实际耗时(分钟) 重要成长
Planning 计划 20 30
Estimate 做这个任务需要多长时间 900 720
Development 开发 360 360
Analysis 需求分析(包括学习新技术) 30 30
Design Spec 生成设计文档 180 100
Design Review 设计复审(和同事审核设计软件) 300 100
Coding Standard 代码规范 (为目前的开发制定合适的规范) 60 60
Design 具体设计 300 240
Coding 具体编码 600 400
Code Review 代码复审 120 60
Test 测试(自我测试,修改代码,提交修改) 240 120
Reporting 报告 120 60
Test Report 测试报告 120 80
  | Size Measurement         |   计算工作量         | 20             |  20     |

| Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 60 | 30 | |

评价

  • 结对编程中的两个角色
  • 领航员:20162323周楠
  • 驾驶员:20162322朱娅霖

两个人在一起结对编程,能互相学习,从对方身上看到自己欠缺的地方,遇到困难也可以互相鼓励,共同解决,不像一个人时那样焦头烂额,耗费时间。

posted on 2017-06-25 15:37  GiggleKV  阅读(129)  评论(0)    收藏  举报

导航