所以我有这个文本文件,有一堆单行单词,我想添加到我的数组。但不知何故,JUnit测试仍然失败。关于如何解决这个问题的任何想法?变量numberOfWords已经声明并赋值。
if edmg1 > fdmg1:
print ("The drgon has dealt more damage than you!")
complete = 0
elif fdmg1 < 5:
print ("You didn't do enough damage to kill the drgon, but you manage to escape")
complete = 1
else:
print ("You killed the drgon!")
complete = 1
return complete
-----完整档案如下。我还将分享测试-------------
public void addWordsToArray(String fileName) {
loadWords(fileName);
String[] words = new String[numberOfWords];
for (int i = 0; i < numberOfWords; i++) {
words[i] = iter.next(); } }
------测试是:------------
public class Words {
ArrayList<String> wordList; // All the words
Iterator<String> iter; // iterator for the wordlist
int numberOfWords; // number of words in the file
String[] words; // this array holds your words
public Words() {
wordList = new ArrayList<>();
// iter = wordList.iterator();
}
/**
* This method loads the words from a given file
*
* @param fileName
* input file name
*/
private void loadWords(String fileName) {
wordList.clear();
numberOfWords = 0;
// This will reference one line at a time
String line = null;
int count = 0;
try {
// FileReader reads text files in the default encoding.
FileReader fileReader = new FileReader(fileName);
// Always wrap FileReader in BufferedReader.
BufferedReader bufferedReader = new BufferedReader(fileReader);
while ((line = bufferedReader.readLine()) != null) {
wordList.add(line.toLowerCase());
count++;
}
// Always close files.
bufferedReader.close();
numberOfWords = count;
iter = wordList.iterator();
} catch (FileNotFoundException ex) {
System.out.println("Unable to open file '" + fileName + "'");
} catch (IOException ex) {
System.out.println("Error reading file '" + fileName + "'");
}
}
public String getWord(int index) {
if (index < 0 || index >= numberOfWords) {
return null;
}
return words[index];
}
/**
* This method adds all the words to an array called words
*
* variable numberOfWords is already declared and has value and contains number
* of words
*
* @param fileName:
* input file name
*/
public void addWordsToArray(String fileName) {
loadWords(fileName); // DO NOT CHANGE
String[] words = new String[numberOfWords];
for (int i = 0; i < numberOfWords; i++) {
words[i] = iter.next();
// variable numberOfWords has the number of words
// TODO
// String[] words has been declared. Now instantiate the array to the words
// array size is equal to the number of words
}
// words = null;
// TO DO
/**
* Calling iter.next() will return the next word in the file. For examples
* String w = iter.next(); iter.next() always gives a next word
*/
// TO DO
// Add all word into the array words
}
/**
*
* @param word:
* input
* @return true if the given word exits in the words array. False otherwise
*/
public boolean contains(String word) {
for (String wordz : wordList) {
if (wordz.contains(word)) {
return true;
}
}
return false;
}
/**
*
* @param sentence:
* input sentence
* @return true if every word in the sentence exists in your words array. False
* otherwise.
*/
public boolean containsSentence(String sentence) {
String[] sp = sentence.split(" ");
for (String wordz : wordList) {
if (wordz.equals(sp)) {
return true;
}
}
return false;
}
/**
* reverse a sentence
*
* @param sentence:
* input sentence
* @return reversed sentence. For example: input: "i love you" return: "you love
* i" (hint: trim leading and trailing spaces")
*/
public String reverseSentence(String sentence) {
// if(sentence == null || sentence.length()==0) {
// return sentence;
// }
String[] sp = sentence.split(" ");
StringBuilder sb = new StringBuilder();
for (int i = sp.length - 1; i >= 0; i--) {
sb.append(sp[i]);
sb.append(" ");
}
return sb.toString().trim();
}
/**
*
* @param word:
* input word
* @return the number of occurrences of the word . If the word does not exist,
* return 0
*/
public int count(String word) {
int count = 0;
for (String wordz : wordList) {
if (wordz.equalsIgnoreCase(word)) {
count++;
// return count++;
}
}
return count;
}
/**
*
* @param word1:
* input word
* @param word2:
* input word
* @return true if all letters from word1 exist in word2, and all letters from
* word2 exist in word1.
*/
public boolean anagram(String word1, String word2) {
String sw1 = word1.replaceAll("\\s", "");
String sw2 = word2.replaceAll("\\s", "");
boolean check = true;
char[] w1 = sw1.toLowerCase().toCharArray();
char[] w2 = sw2.toLowerCase().toCharArray();
Arrays.sort(w1);
Arrays.sort(w2);
if (sw1.length() != sw2.length()) {
return false;
} else {
check = Arrays.equals(w1, w2);
}
if (check) {
return true;
} else
return false;
}
/**
*
*
* @param word:
* input word
* @param fileName:
* input file name
*
* PRINT all words that are the anagrams to the word input within
* words array
*
*/
public void findAnagram(String word, String fileName) {
addWordsToArray(fileName); // DO NOT CHANGE
}}
}
-.------
答案 0 :(得分:1)
正如@ scigs的评论指出的那样,你在这里留下了很多。我将假设您只是尝试将文件中的所有单词加载到一个数组中(并且每行有一个单词)。您可以使用Scanner
:
Scanner scanner = new Scanner(new File(filename));
ArrayList<String> words = new ArrayList<>();
while (scanner.hasNextLine()) {
words.add(scanner.nextLine().trim());
}
您还可以将Apache Commons commons-io
库用于其IOUtils
类。 IOUtils.readLines()
方法与上面的代码块完全相同,但显然使用起来更方便/更紧凑:
List<String> words = IOUtils.readLines(new FileInputStream(filename));
答案 1 :(得分:0)
words = new String[numberOfWords];
for (int i = 0; i < numberOfWords; i++) {
words[i]=iter.next();
工作得很好。谢谢你们!