Java实现WordPairsList类numMatches方法及匹配单词对统计
Java WordPairsList 代码修复方案
问题定位
- 构造器嵌套循环判断逻辑错误,导致
allPairs始终为空 numMatches方法未实现计数逻辑WordPairsList类中冗余定义了getFirst()/getSecond()方法,调用了ArrayList不存在的方法导致编译报错
修复步骤
1. 修复构造器空列表问题
原代码内层循环j从i+1开始,永远无法满足j == i的判断条件,直接删除该无效判断,在嵌套循环中直接生成WordPair对象加入列表即可。
2. 移除冗余错误方法
getFirst()、getSecond()是WordPair类的实例方法,不属于WordPairsList容器类,直接删除这两个方法即可解决编译错误。
3. 实现numMatches计数逻辑
- 初始化计数器变量为0
- 遍历
allPairs中每一个WordPair对象 - 调用
WordPair的getFirst()、getSecond()方法获取两个单词 - 注意:字符串内容比较必须使用
equals()方法,不能用==,==仅会比较字符串对象的内存地址,无法正确判断内容是否相等 - 匹配成功则计数器+1,遍历完成后返回计数器值
修正后完整可运行代码
import java.util.*; public class WordPairsList { private ArrayList<WordPair> allPairs; public WordPairsList(String[] words) { allPairs = new ArrayList<WordPair>(); for (int i = 0; i < words.length - 1; i++){ for (int j = i + 1; j < words.length; j++){ allPairs.add( new WordPair(words[i], words[j])); } } } public int numMatches() { int count = 0; for (WordPair currentPair : allPairs) { if (currentPair.getFirst().equals(currentPair.getSecond())) { count++; } } return count; } public String toString() { return allPairs.toString(); } public static void main(String[] args) { String[] words = {"Hi", "there", "Tyler", "Sam", "there"}; WordPairsList list = new WordPairsList(words); System.out.println(list); System.out.println("The number of matched pairs is: " + list.numMatches()); } } class WordPair { private String word1; private String word2; public WordPair(String w1, String w2) { word1 = w1; word2 = w2; } public String getFirst() { return word1; } public String getSecond() { return word2; } public String toString() { return "(" + word1 + ", " + word2 + ")"; } }
测试说明
- 代码中
main方法的测试数组新增了一个"there",构造器会自动生成(there, there)的匹配对,最终numMatches返回值为1 - 可根据需求调整
words数组内容验证统计结果
内容的提问来源于stack exchange,提问作者Yusuf Halim
相关产品推荐
相关产品推荐

