极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 29616|回复: 8

Processing之旅-----【7课,HashMap实验课】

[复制链接]
发表于 2013-5-9 20:27:40 | 显示全部楼层 |阅读模式
同学们大家好,我们上课。这节课依然是数据结构的实验课。
  1. /**
  2. * HashMap例子
  3. * by Daniel Shiffman.  
  4. *
  5. * 这个例子说明了并示范了如何使用 HashMap 去存储
  6. * 一个对象的集合,并用一个键值去检索. 这看起来非常像数组,
  7. * 只有代替访问元素的数字索引, 我们用一个字符串
  8. * 如果熟悉其他语言中的关联数组,
  9. * 这是同样的概念。
  10. *
  11. * 这个例子使用哈希映射了一个简单的集合
  12. * [url]http://en.wikipedia.org/wiki/Concordance_[/url](publishing)
  13. */

  14. // The next line is needed if running in JavaScript Mode with Processing.js
  15. /* @pjs font="Georgia.ttf"; */

  16. HashMap<String, Word> words;  // HashMap 对象

  17. String[] tokens;  // 从输入文件的所有单词的数组
  18. int counter;//计数器

  19. void setup() {
  20.   size(640, 360);//设置窗口大小
  21.   
  22.   words = new HashMap<String,Word>();//对HashMap对象进行初始化操作

  23.   // 读取文件并分割
  24.   String[] lines = loadStrings("dracula.txt");
  25.   String allText = join(lines, " ");//这句话的意思相当于allText=allText+lines+" ";
  26.   tokens = splitTokens(allText, " ,.?!:;[]-");//去掉alltext中的,.?!:;[]-符号并把新的字符串返回给tokens
  27.   
  28.   // 创建字体
  29.   textFont(createFont("Georgia", 24));
  30. }

  31. void draw() {
  32.   background(51);
  33.   fill(255);
  34.   
  35.   // 一次传送一个词
  36.   String s = tokens[counter];
  37.   counter = (counter + 1) % tokens.length;

  38.   // 这个词是否在HashMap中
  39.   if (words.containsKey(s)) {
  40.     // 得到这个词的对象并增加计数器
  41.     // 我们通过键值访问HashMap中的对象, String
  42.     Word w = words.get(s);
  43.     w.count();
  44.   } else {
  45.     // 否则做一个新的词在HashMap中
  46.     Word w = new Word(s);
  47.     // 添加元素到HashMap 用put()函数 有两个 两个参数, "key" and "value"
  48.     // 这个key对于我们来说就是String, the value 就是 Word 对象
  49.     words.put(s, w);   
  50.   }

  51.   // x and y 将被用找出每一个单词
  52.   float x = 0;
  53.   float y = height-10;

  54.   // 查看每一个单词
  55.   for (Word w : words.values()) {
  56.    
  57.     // 每个单词只显示3次
  58.     if (w.count > 3) {
  59.       // 这个size就是count
  60.       int fsize = constrain(w.count, 0, 100);
  61.       textSize(fsize);
  62.       text(w.word, x, y);
  63.       // 在X轴上移动
  64.       x += textWidth(w.word + " ");
  65.     }
  66.    
  67.     //如果X上移动到边缘了,就移动Y轴
  68.     if (x > width) {
  69.       x = 0;
  70.       y -= 100;
  71.       // 如果y轴也移动满了我们就停止移动
  72.       if (y < 0) {
  73.         break;
  74.       }
  75.     }
  76.   }
  77. }

  78. class Word {
  79.   
  80.   int count;
  81.   String word;
  82.   
  83.   Word(String s) {
  84.     word = s;
  85.     count = 1;
  86.   }
  87.   
  88.   void count() {
  89.     count++;
  90.   }

  91. }//
复制代码



效果如图,非常明显,就是单词出现的次数越多就变得越大。
好了,同学们下课。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2013-5-10 10:54:16 | 显示全部楼层
这个效果好~~~
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-10 17:10:47 | 显示全部楼层
弘毅 发表于 2013-5-10 10:54
这个效果好~~~

谢谢支持~其实我也在群里啊~两个群都有,咱们Processing区为什么没有像Arduino一样的精华置顶设置啊?
回复 支持 反对

使用道具 举报

发表于 2013-5-10 17:21:56 | 显示全部楼层
yangfanconan 发表于 2013-5-10 17:10
谢谢支持~其实我也在群里啊~两个群都有,咱们Processing区为什么没有像Arduino一样的精华置顶设置啊? ...


偶把你权限加为斑竹了。。。这样你就有权限了。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-10 17:38:13 | 显示全部楼层
弘毅 发表于 2013-5-10 17:21
偶把你权限加为斑竹了。。。这样你就有权限了。。

谢谢~嘿嘿
回复 支持 反对

使用道具 举报

发表于 2013-5-10 21:47:31 | 显示全部楼层
好强大。。好给力。。。
回复 支持 反对

使用道具 举报

发表于 2014-10-30 16:11:32 | 显示全部楼层
The file "dracula.txt" is missing or inaccessible, make sure the URL is valid or that the file has been added to your sketch and is readable.  这个例子也出现错误了
回复 支持 反对

使用道具 举报

发表于 2014-10-30 16:16:31 | 显示全部楼层
dracula.txt  这个文件放在哪里啊
回复 支持 反对

使用道具 举报

发表于 2017-6-2 13:30:49 | 显示全部楼层
LINK~ 发表于 2014-10-30 16:16
dracula.txt  这个文件放在哪里啊

放到和你创建的.pde格式的代码文件夹下就行。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-3-28 21:20 , Processed in 0.047050 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表