从字典文件中读取的 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]) 甚至不应该编译,将 charString 进行比较。如果它编译,它不应该评估为true 好的。我将字符串转换为字符,它仍然不起作用。 没有理由不编译;您可以检查任何两个对象之间的相等性。 【参考方案1】:

    你的静态变量 words 没有被使用,因为你在赋值之前定义了一个新的 String[] words。

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

以上是关于从字典文件中读取的 Java Anagrams的主要内容,如果未能解决你的问题,请参考以下文章

从 plist 文件中读取字典的奇怪行为

Python:从文件中读取多行并将实例存储在字典中

从 .plist 文件中读取

从 plist 读取字典后无法编辑字典

python字典,读取文件行,添加到dict()

字符串,字典,数组写入本地文件和从本地文件读取