从字典文件中读取的 Java Anagrams
Posted
技术标签:
【中文标题】从字典文件中读取的 Java Anagrams【英文标题】:Java Anagrams reading from dictionary file 【发布时间】:2011-12-19 04:42:57 【问题描述】:我无法将我的字典文件与字谜进行比较。我在每个地方都放了一个打印语句,它正确地读取了字典文件,它也正确计算了所有的字谜但它不会只计算字典文件中的字谜。我很确定这是很小的事情,如果有人可以修复它,将不胜感激。
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Anagram3
static int size;
static int count;
static char[] charArray;
static char[] words;
public static void main(String[] args) throws IOException
Scanner sc = new Scanner(System.in);
System.out.println("Type the path of the dictionary to read from : ");
String fileName = sc.nextLine();
List<String> dictionary = new ArrayList<String>();
BufferedReader br = null;
try
br = new BufferedReader(new FileReader(fileName));
String word;
while((word = br.readLine())!=null)
dictionary.add(word);
catch(IOException e)
e.printStackTrace();
String[] words = new String[dictionary.size()];
dictionary.toArray(words);
//for( int i = 0; i < words.length; i++ )
// System.out.println(words[i]);
System.out.println("\nEnter the phrase to scramble: ");
String input = sc.nextLine();
System.out.println();
size = input.length();
count = 0;
charArray = new char[size];
for (int j = 0; j < size; j++)
charArray[j] = input.charAt(j);
doAnagram(size);
public static void doAnagram(int newSize)
int limit;
if (newSize == 1) // if too small, return;
return;
// for each position,
for (int i = 0; i < newSize; i++)
doAnagram(newSize - 1); // anagram remaining
if (newSize == 2) // if innermost,
printAnagrams();
rotate(newSize); // rotate word
public static void rotate(int newSize)
int i;
int position = size - newSize;
char temp = charArray[position];
for (i = position + 1; i < size; i++)
charArray[i - 1] = charArray[i];
charArray[i - 1] = temp;
public static void printAnagrams()
for (int i = 0; i < size; i++)
//System.out.print(charArray[i]);
if(charArray[i] == words[i])
System.out.print(charArray[i]);
System.out.println();
【问题讨论】:
(1) 请检查粘贴的代码,中间看起来很有趣。 (2) 您是否检查过您生成的排列是否在字典中找到? 是的,这就是我在 printAnnagrams() 语句中使用 if 语句所做的事情,这就是我遇到的问题。抱歉,这是我第一次这样做,中间看起来很有趣? 嗯,if(charArray[i] == words[i])
甚至不应该编译,将 char
与 String
进行比较。如果它编译,它不应该评估为true
。
好的。我将字符串转换为字符,它仍然不起作用。
没有理由不编译;您可以检查任何两个对象之间的相等性。
【参考方案1】:
你的静态变量 words 没有被使用,因为你在赋值之前定义了一个新的 String[] words。
使用 equals 方法比较字符串。 1
【讨论】:
【参考方案2】:另一个问题是,您将生成的第 i 个字谜与字典中的第 i 个元素进行比较,而您实际上(可能)想要测试字典中的任何位置是否存在第 i 个字谜.
您可以尝试对字典使用字符串的 HashSet h 而不是数组,然后使用 h.contains(...) 检查字谜的有效性。
【讨论】:
以上是关于从字典文件中读取的 Java Anagrams的主要内容,如果未能解决你的问题,请参考以下文章