从字典文件中读取的Java字谜

时间:2011-11-01 02:19:25

标签: java arrays anagram

我在将字典文件与字谜比较时遇到问题。我在每个都放了一个print语句,它正确地读取了字典文件,它也正确地计算了所有的字谜但是它不会只计算字典文件中的字谜。我很确定它是非常小的东西,如果有人能解决它,我将非常感激。

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();
}
}

2 个答案:

答案 0 :(得分:0)

  1. 您的静态变量字未被使用,因为您在分配之前定义了新的String []字。

  2. 使用equals方法比较字符串。 1

答案 1 :(得分:0)

另一个问题是你将你生成的第一个字谜与字典中的第i个元素进行比较,当你实际上(大概)想要测试字典中任何位置是否存在第一个字谜时

您可以尝试使用字符串的HashSet h而不是数组,然后使用h.contains(...)检查anagram的有效性。