我给了一个哈希映射,其中包含字符串列表的键,其中包含两个字符串和具有不同字符串数量的字符串列表值。我必须汇编并返回hashmap值的字符串列表,除非值包含多个字符串,在这种情况下,该元素应该是列表中的随机字符串。
换句话说,from selenium import webdriver
driver = webdriver.PhantomJS()
driver.get("http://www.python.org")
driver.save_screenshot('screen.png')
exit()
(每个字母是一个字符串)的地图将返回元素<[a, b], b> | <[b, c], d> | <[c, d], [e, f, g]> | <[d, e], f>
的字符串列表,其中x是随机选择的e,f或g。 还可以假设地图中的第一个键是长度为2的字符串列表,其中两个元素都是“”,最终值是长度为1的字符串列表,其中包含“”(参见底部) )。以下是代码。
[b, d, x, f]
这里的问题是它应该通过AssertEquals等从单独的程序传递测试。问题是我得到一个断言错误,说“不符合aa”。我无法理解它的期望,我无法看到我的程序如何不返回我上面指定的内容。相关的行是:
static ArrayList<String> generateText(Map<List<String>, List<String>> whatComesNext, Random r) {
List<List<String>> listKey = new ArrayList<List<String>>();
ArrayList<String> ret = new ArrayList<String>();
int x;
ret.add("<START>");
ret.add("<START>");
for (List<String> key : whatComesNext.keySet())
listKey.add(key);
for (int i=0; i<whatComesNext.size()-1; i++)
if (listKey.get(i).size()>1) {
x=r.nextInt(listKey.get(i).size());
ret.add(listKey.get(i).get(x)); }
else ret.add(listKey.get(i).get(0));
return ret;
}
而测试的其余部分看起来像这样。
Pattern pattern = Pattern.compile("(ab)+c");
int [] histogram = new int[10];
for(int i = 0; i < 128; i++) {
List<String> result = MarkovText.generateText(whatComesNext, new Random(197*i));
result = MarkovText.excludeStartAndEndMarkers(result);
assertEquals(1, result.size() % 2);
int repeats = (result.size()-1)/2;
if (repeats < histogram.length)
histogram[repeats] = histogram[repeats]+1;
StringBuffer together = new StringBuffer();
for(String w : result)
together.append(w);
assertTrue("Doesn't match " + together, pattern.matcher(together).matches());
编辑:地图是在程序的早期创建的,来自单独的给定字符串列表。对于该程序的这一部分,列表具有以下要素:[“[START]”,“[START]”,“a”,“b”,“a”,“b”,“c”,“[END] ]“]其中每个键是一对两个连续元素,值是该对后面的元素。