这是我已经问过的几个问题的后续。之前我问过如何使用一种方法来确定一个列表的元素是否存在于另一个列表中。我这样做的原因是因为我想确定一个列表是否包含另一个列表的字谜 - 使用用户输入和字典列表。我很难确定这一点。我想将列表传递给一种方法来确定一个是否包含另一个的元素。现在,只有当我知道存在真正的字谜时,它才会返回 false。
有人可以查看我的代码并帮助我弄清楚吗?另外,我将如何修改它以确定用户输入是否包含多词字谜?
我的算法通过获取两个列表并将每个单词中的字母按字母顺序排列来工作。我在另一篇文章中读到了这种方法,并决定采用它——它仍在进行中。这是我的代码:
public class AnagramSolver1 {
public static void main(String[] args) throws IOException {
//Scanner/Reader
Scanner scan = new Scanner(System.in);
BufferedReader in = new BufferedReader(new FileReader("src/dictionary.txt"));
//Lists to contain unsorted dictionary and input and after alphabetical sort
List<String> dictionary = new ArrayList<String>();
List<char[]> dictionarySort = new ArrayList<char[]>();
List<String> inputList = new ArrayList<String>();
List<char[]> inputSort = new ArrayList<char[]>();
String line = null;
//read in dictionary then sort alphabetically////
while (null!=(line=in.readLine()))
{
dictionary.add(line);
}
in.close();
dictionarySort = sortList(dictionary);
//print statement
/*
for(int i = 0; i < dictionarySort.size(); i++){
System.out.println(dictionarySort.get(i));
}*/
//User input, scan in then sort alphabetically////
System.out.println("Enter Word: ");
String input = scan.next();
inputList.add(input);
inputSort = sortList(inputList);
//print statement
/*
for(int i = 0; i < inputSort.size(); i++){
System.out.println(inputSort.get(i));
}*/
//determine if user input is an angram of any dictionary word
boolean isAnagram = isAnagram(dictionarySort, inputSort);
System.out.println(isAnagram);
}
//sort a string into a char array
public static List<char[]> sortList (List<String>sort){
List<char[]> sortList = new ArrayList<char[]>();
char[] letterSort;
for (int i = 0; i < sort.size(); i++) {
letterSort = sort.get(i).toCharArray();
Arrays.sort(letterSort);
sortList.add(letterSort);
}
return sortList;
}
//Determines if User input is an Anagram or not.
public static boolean isAnagram (List<char[]>dictionarySort, List<char[]>inputSort){
for (char[] c : dictionarySort) {
if (inputSort.contains(c)) {
return true;
}
}
return false;
}
}