我想使用我扫描的内容作为对象的引用,以用于不同类中的方法。基本上是scanner.nextLine()。method();但无论我怎么做,我都找不到符号
我正在扫描一个txt文件,并希望为每个新单词创建一个新的Word,如果该单词重复,我应该使用Word类中的方法增加一个计数器。
class Word{
int counter = 1;
public counterIncrease(){
counter ++;
}
}
我应该扫描单词,将它们放在一个名为fileArray的ArrayList中,然后检查它们是否重复,如果有的话我应该从Word类增加计数器,如果不是我创建一个新单词
while(scanner.hasNextLine()){
String temp = scanner.nextLine();
if(fileArray.contains(temp){
temp.counterIncrease();
else{
fileArray.add(new Word(temp);
}
答案 0 :(得分:4)
这里至少有三个问题。首先,如果您的fileArray
是List<Word>
,则您尝试在nextLine()
个对象列表中查找字符串(返回类型Word
)。那永远无法发挥作用。
其次,您尝试在字符串而不是counterIncrease()
的实例上调用Word
。
第三,当我确定你只想打电话一次时,你多次拨打nextLine()
。
我强烈怀疑你想要Map<String, Word>
,你可以使用:
String line;
while ((line = scanner.nextLine()) != null) {
Word word = map.get(line);
if (word === null) {
map.put(line, new Word(line)); // I assume this constructor exists
} else {
word.counterIncrease();
}
}
此代码每次迭代仅调用 我会亲自更改 换句话说,您要分离&#34;确保我们有 目前尚不清楚您的 说完这一切之后,如果你只是想要字数,你根本不需要nextLine()
一次,按字符串查找当前单词,并仅在counterIncrease()
的实例上调用Word
。 / p>
Word
代码,以便counter
为0,直到您拨打counterIncrease
,此时循环将变为:String line;
while ((line = scanner.nextLine()) != null) {
Word word = map.get(line);
if (word === null) {
word = new Word(line);
map.put(line, word);
}
word.counterIncrease();
}
Word
个实例&#34;来自&#34;增加单词&#34;的计数。不可否认,这并不是一个巨大的差异...... Word
类实际是否具有必要的构造函数 - 它看起来应该是这样的:public final class Word {
private int count;
private final String text;
public Word(String text) {
this.text = text;
}
public int getCount() {
return count;
}
public int incrementCount() {
return ++count;
}
public String getText() {
return text;
}
}
Word
课程。您可以使用Map<String, Integer>
或Map<String, AtomicInteger>
。例如:Map<String, AtomicInteger> map = new LinkedHashMap<>();
String line;
while ((line = scanner.nextLine()) != null) {
AtomicInteger counter = map.get(line);
if (counter === null) {
counter = new AtomicInteger();
map.put(line, counter);
}
counter.incrementAndGet();
}
答案 1 :(得分:0)
while(scanner.hasNextLine()){
// you only want to use nexLine() once per while loop, otherwise your scanner goes forward each time
String line = scanner.nextLine();
if(fileArray.contains(line){
//line.increaseCounter(); there is not such a method for String
else{
fileArray.add(new Word(line);
}