【发布时间】:2014-01-18 22:24:39
【问题描述】:
我正在开发一个文字游戏,其中一种方法是打乱方法,它应该采用 String ,然后使用 Collections.shuffle(ListOfSChars);并检查 scramble 是否在 SortedSet Dictionary 中。 if dictionary.contains(scramble) && scramble != s output scramble
我的代码中的示例是葡萄,如果两个条件为真,它应该输出任何可能的葡萄词, -首先,新的炒字不能是葡萄。 wordsSet.contains(争夺) -第二,新的打乱词必须在字典中。争夺!= s
我的代码输出葡萄忽略 (if (wordsSet.contains(scramble) && scramble != s))
如何避免返回相同的字符串?
谢谢,
public class F
{
public static void main(String[] args)
{
String s = "grapes";
SortedSet<String> dictionary = new TreeSet<String>(EnglishWords);
List<Character> list = new ArrayList<Character>();
for (char c : s.toCharArray)
list.add(c);
Collections.shuffle(list);
String scramble = "";
StringBuilder sb1 = new StringBuilder();
for (char c : list)
sb1.append(c);
scramble = sb1.toString();
sb1.setLength(0);
boolean found = false;
while (found != true)
{
Collections.shuffle(list);
for (char c : list)
sb1.append(c);
scramble = sb1.toString();
sb1.setLength(0);
if (wordsSet.contains(scramble) && scramble != s)
{
found = true;
break;
} else if (!wordsSet.contains(scramble))
{
found = false;
}
}
System.out.println("scrambled word is " + scramble);
}
}
【问题讨论】:
-
永远不要使用 == (!=) 比较(一般)对象 - 它只会为同一个对象返回 true。
-
如果没有匹配项会不会无限循环?
-
您应该在输入字符串上使用排列而不是随机洗牌。使用 shuffle,您将多次运行相同的检查。
标签: java string collections set