从Sentence类向Word类传递数组时遇到的问题及代码示例
问题分析与修复方案
我来帮你拆解这段代码里的问题,一步步解决数组传递的问题:
1. Sentence类中的核心错误
你在定义数组时,错误地用+拼接了多个字符串:
private static String[] arrayList = { "Everybody", "was", "having" + "fun" + "at" + "the party" };
这会导致数组的第三个元素变成"havingfunatthe party",而不是你预期的多个独立单词——现在数组长度只有3,完全不符合拆分句子为单词的需求。你应该把每个单词单独作为数组元素,去掉多余的+:
private static String[] sentenceWords = { "Everybody", "was", "having", "fun", "at", "the party" };
另外,变量名arrayList容易误导,因为这是一个普通数组(String[]),不是Java集合类的ArrayList,建议改成更清晰的名字比如sentenceWords。
2. Word类中的多处问题
2.1 拼写错误扎堆
- 方法名
getArayList少了字母r,应该是getArrayList; - 数组变量名
araylist同样拼写错误; - 调用静态方法时写了
Exper.getArrayList(),但不存在Exper这个类,正确的应该是Sentence.getArrayList()。
2.2 多余的方法参数
你的getArrayList方法定义了String[] a参数,但整个方法里完全没用到它,直接删掉就行。
2.3 无意义的继承
Word extends Sentence完全没必要,因为静态成员(静态方法、静态变量)不需要通过继承就能访问,直接通过类名调用即可。继承在这里反而会让代码逻辑混乱,建议去掉继承关系。
修正后的完整代码
优化后的Sentence类
public class Sentence { // 修正数组元素,并重命名变量提升可读性 private static String[] sentenceWords = { "Everybody", "was", "having", "fun", "at", "the party" }; public static String[] getSentenceWords() { // 返回数组副本,避免外部直接修改原数组(可选但更安全) return sentenceWords.clone(); } }
这里加了一个小优化:返回数组的副本sentenceWords.clone(),防止外部调用者直接修改Sentence类内部的原数组,保证数据安全性。
修正后的Word类
public class Word { public void printSentenceWords() { // 直接通过类名调用Sentence的静态方法获取数组 String[] words = Sentence.getSentenceWords(); for (String s : words) { System.out.print(s + " "); } // 可选:打印完后换行,避免后续输出连在一起 System.out.println(); } }
我把方法名改成了printSentenceWords,更贴合它的实际功能(打印句子单词),避免和获取数组的方法混淆。
测试代码
你可以用这段代码验证修复后的功能:
public class Main { public static void main(String[] args) { Word word = new Word(); word.printSentenceWords(); // 输出:Everybody was having fun at the party } }
内容的提问来源于stack exchange,提问作者Nick
相关产品推荐
相关产品推荐

