0

我正在为我在 atm 做的一项任务编写一段代码,但我完全被 1 点困住了。

我需要将数组列表的内容转换为字符串或字符串的形式,以便将其输入 toString() 以便将其打印到屏幕上。

public String toString(){
    String full;
    full = (this.name + this.address + "\n" + "Student Number = " + this.studentId);
    for (int i = 0; i < cs.size(); i++) {
        full.append(cs[i]);
    return full;

上面的代码是我尝试将 3 个变量和数组列表的内容组合成具有格式的单个字符串的地方。

不幸的是,它会产生一个错误“表达式的类型必须是数组类型,但它解析为 ArrayList”

谢谢你的帮助。

杰克

4

6 回答 6

5

cs 是数组列表,所以你必须做 get 操作,而不是 [] (这是用于数组访问)

它应该是这样的:

full.append(cs.get(i));

不是

full.append(cs[i]);

编辑:正如 assylis 所说,full不应该StringBuilder只是String,因为 String 不支持append()方法。

StringBuilder full = new StringBuilder();

于 2012-09-11T14:21:05.383 回答
2

您正在尝试访问一个ArrayList,就好像它是一个原始数组(使用索引周围的方括号)。尝试改用该get(int index)方法。

IE,

cs.get(i);
于 2012-09-11T14:22:14.683 回答
2

Apache Commons StringUtils有不同种类的join()方法,这意味着您不必自己编写。您可以指定分隔符,甚至可以指定前缀/后缀。

我建议你看看 Apache Commons,不仅仅是为了这个,还有很多其他有用的东西。

于 2012-09-11T14:26:12.130 回答
0

请注意,因为您没有在每个元素之间放置任何分隔符,所以ArrayList它可能不可读。考虑使用 Guava 的Joiner类。

所以而不是

 for (...)
   s.append(y);

如果会

   a.append(Joiner.on(" ").join(yourList));

Joiner 也比 for 循环更有效,因为它在StringBuilder内部使用 a。

于 2012-09-11T14:49:38.197 回答
0

只需使用“cs.get(i)”代替“cs[i]”。因为 cs 是一个 ArrayList 而不是一个数组。

并且还使用 full = full + cs.get(i); 而不是 full.append(cs.get(i));

作为字符串类型没有附加方法。

于 2012-09-11T14:32:32.097 回答
0

你不能索引一个ArrayList类似的数组,你需要这个get(index)方法。更好的是,使用增强的for循环,因为不建议对列表进行索引,因为实现可能会更改为LinkedList.

我还建议使用 aStringBuilder来提高效率:

public String toString() {
    StringBuilder full = new StringBuilder();
    full.append(this.name);
    full.append(this.address);
    full.append("\n");
    full.append("Student Number = ");
    full.append(this.studentId);
    for (String s: cs)
        full.append(s);
    return full.toString();
}
于 2012-09-11T14:23:52.823 回答