![](/img/trans.png)
[英]How to check if a string of 7 random letters can form a word that exists in a file
[英]Implement Markov's algorithm using random letters till letters makeup one word in the string?
我试图使用马尔可夫链显示随机字母,直到字母组成字符串中找到的单词之一。 我认为我走在正确的轨道上,但是它不会在到达一个单词时停下来,而是会打印整个随机字符串。
我相信将会检查字符是否与打印件匹配,但不确定...
我在这里做错了什么?
public class Main {
public static void main(String[] args) {
final int NUMBER_OF_CHARS = 100000;
String[] words = { "at", "is", "he", "we", "up", "on" };
for (int i = 0; i < NUMBER_OF_CHARS; i++) {
char ch = main.getRandomLowerCaseLetter();
if ((i + 1) % 40 == 0)
System.out.println(ch);
else
System.out.print(ch);
}
}
public static char getRandomCharacter(char ch1, char ch2) {
return (char)(ch1 + Math.random() * (ch2 - ch1 + 1));
}
public static char getRandomLowerCaseLetter() {
return getRandomCharacter('a', 'z');
}
}
我没有看到任何if语句来检查字符是否已经组成单词。 换句话说,循环永远不会退出,因为您还没有为此编写逻辑。
您可能想随即将生成的每个字符存储在String中,如下所示:
String chars = "";
...
for(...){
...
chars.append(ch);
...
}
您还应该编写如下代码来打破循环:
for(String word : words){
if(chars.contains(word){
break outerLoop;
}
}
像这样标记外部的for循环,以便break语句可以脱离两个循环,而不仅仅是内部的for循环:
outerLoop: while(...){}
可能有更好的方法可以执行此操作,但是可以通过一些快速的方法解决您的问题,正如Keara所建议的那样,您需要随身存储每个字符,然后遍历并检查是否找到了所要查找的东西。 因为(无论如何,在您给出的示例中)您要查找的单词的最大长度为2个字符,因此每次找到无效组合时都可以轻松重置字符串。
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String[] args) {
final int NUMBER_OF_CHARS = 100000;
String[] words = {"at", "is", "he", "we", "up", "on"};
List<Character> characters = new ArrayList<>();
for (int i = 0; i < NUMBER_OF_CHARS; i++) {
char ch = getRandomLowerCaseLetter();
characters.add(ch);
if ((i + 1) % 40 == 0) {
System.out.println(ch);
if (contains(characters, words)) {
System.exit(0);
}
} else {
System.out.print(ch);
if (contains(characters, words)) {
System.exit(0);
}
}
}
}
public static boolean contains(List<Character> characters, String[] words) {
String st = "";
int count = 0;
for (Character c : characters) {
st += c;
count++;
if (count == 2) {
for (String s : words) {
if (st.equals(s)) {
System.out.println(" Found: " + s);
return true;
}
}
count = 0;
st = "";
}
}
return false;
}
public static char getRandomCharacter(char ch1, char ch2) {
return (char) (ch1 + Math.random() * (ch2 - ch1 + 1));
}
public static char getRandomLowerCaseLetter() {
return getRandomCharacter('a', 'z');
}
}
亲切的问候和快乐的编程!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.