嘿大家我是java的新手,我正在为我的java课程介绍做奖金任务,我想知道是否有人可以帮我指导奖金问题:我只需要一个开始点!谢谢你的帮助!
这是作业的原始要求:
1)一个构造函数,它接受一个参数,一个String,用于处理输入文件的名称。 DONE 2)一个名为processFile()的函数,它不接受任何参数,并抛出IOException。此函数必须读取输入文件的内容并计算文件中每个标记(单词)的存在次数。成员变量HashMap是一个很好的类。 3)getFileName()函数,没有参数,返回包含输入文件名的String。 4)getTokenCount()函数,没有参数,返回一个int,它是输入文件中的标记(单词)的总数。 5)一个getTokenCount()函数,它接受一个String参数,并返回该标记(word)在输入文件中出现的次数。 6)一个getTokensHavingCount()函数接受一个int参数(count),并返回一个字符串的ArrayList,其中这些字符串是完全出现的标记" count"输入文件中的时间。 7)getTokensHavingLength()函数接受一个int参数(长度),并返回一个ArrayListof Strings,其中这些字符串是输入文件中具有该确切长度的标记。 8)getAverageOfCounts()函数,没有参数,返回令牌计数的平均值。
因为这是我到目前为止的代码,
import java.io.*;
public class Assignment4 {
// Your member variables go here
private String filename;
private int wordcount; // ?
private Map<String, Integer> freq = new HashMap<>(); // <Key,Value>
public Assignment4(final String fileName) {
this.filename = fileName;
}
public void processFile() throws IOException {
File file = new File(filename);
BufferedReader reader;
try {
FileReader fileReader = new FileReader(file);
reader = new BufferedReader(fileReader);
file = null;
String text = "";
String line = reader.readLine();
while (line != null) {
text = text + line + " ";
line = reader.readLine();
}
StringTokenizer st = new StringTokenizer(text);
wordcount = st.countTokens();
}
}
public String getFileName() {
return filename;
}
public int getTokenCount() {
return freq.size;
}
public int getTokenCount(final String key) {
return freq.get(key);
}
public ArrayList<String> getTokensHavingCount(final int count) {
ArrayList<String> wordCount = new ArrayList<String>();
Set<String> set = freq.keySet();
for (String word : set) {
int noOfTimes = freq.get(word);
if (noOfTimes == count)
freq.add(word);
}
return wordCount;
}
public ArrayList<String> getTokensHavingLength(final int length) {
ArrayList<String> wordlength = new ArrayList<String>();
Set<String> set = freq.keySet();
for (String word : set) {
if (word.length() == length)
wordlength.add(word);
}
return wordlength;
}
public int getCountOfTokensHavingCount(final int count) {
return getTokensHavingCount(count).size();
}
public int getCountOfTokensHavingLength(final int length) {
return getTokenHavingLength(count).size;
}
public double getAverageOfCounts() {
ArrayList<String> wordlength = new ArrayList<String>();
double sum = 0.0d;
Set<String> set = freq.keySet();
for (String word : set) {
sum += freq.get(word);
}
return sum / (double) freq.size();
}
}
奖金#1:添加一个名为getCountOfTokensHavingCount()的函数,它接受一个int参数(count),并返回输入文件中出现的标记数&#34; count&#34;次。
Bonus#2:添加一个名为getCountOfTokensHavingLength()的函数,它接受一个int参数(length),并返回输入文件中出现的具有正确&#34; length&#34;的标记数。令牌中的字符。
答案 0 :(得分:0)
好的,有些事情。
processFile
没有做它应该做的事情。您的任务是计算每个单词在文本中出现的频率。想法:逐字阅读文件(看看java.util.Scanner
);如果您的HashMap
中已有单词,则将该单词添加为密钥,将数字1添加为值;如果该单词已在您的HashMap
中,则您将该值增加一个。file = null
中设置processFile
?您应该使用BufferedReader
正确关闭finally
。 Java实际上可以自动为您执行此操作:try(FileReader freader = new FileReader(file); BufferedReader breader = new BufferedReader(freader)) { // Your actual code }
。getTokenCount
函数应该返回freq.size()
(您调用函数,而不是属性!)。