我目前正在寻找一种方法,可以使我对多个单词进行拼字游戏评分,并将返回得分最高的单词。我已经能够创建一种方法来获取单词的分数,下一部分是能够调用具有多个单词的方法,它将返回分数最高的单词。
public String highestScoringWord(List<String> words) {
// TODO: find the word with the highest score
int highestScore = 0;
String HighScoreWord = "";
for(int i=0; i<words.size(); i++){
int currentScore = scoreForWord(words.get(i));
if(currentScore>highestScore){
HighScoreWord = words.get(i);
};
};
return HighScoreWord;
}
我正在使用blueJ,如何使用它的接口或codePad调用带有单词列表的此方法。
谢谢
答案 0 :(得分:0)
首先,您必须用单词来制作List<String>
,因为方法String highestScoringWord(List<String> words)
仅将List<String>
作为输入参数。就您而言,现在您可以从多个String对象中制作List<String>
。
List<String> words= Arrays.AsList("Word1","Word2","Word3","Word4");
现在将此列表传递给已经定义的函数highestScoringWord
。
String highestScore=highestScoringWord(words);
您将得到想要的结果。
答案 1 :(得分:0)
如果您使用的是Java 8或更高版本,则可以使用流获取要创建的分数列表的“最大”:
List<String> words = Arrays.asList("Dog", "Cat", "Bird");
int highest = words.stream()
.map(this::scoreForWord)
.max(Integer::compareTo)
.orElse(0);
此代码的作用:
words.stream()
-使用单词列表初始化流。.map(this::scoreForWord)
-使用int
函数的逻辑将每个字符串转换为int scoreForWord(String)
。该方法称为this
,因为我假设它是一个实例方法。如果方法是static
,则必须使用类名来引用该函数:ScrabbleScorer::scoreForWord
.max(Integer::compareTo)
-获取从上一个操作创建的Integer
流的最大值。逻辑将是默认的整数比较器(即Integer::compareTo
).orElse(0)
-由于当开头的给定列表为空时,.max()
操作将返回Optional<Integer>
-我们将处理空的返回情况。我们使用值0
来假设这种情况。