【问题标题】:Override toString efficiently with Char[] Array [duplicate]使用 Char[] 数组有效地覆盖 toString [重复]
【发布时间】:2020-12-09 19:38:00
【问题描述】:

我正在创建一个具有char[] 数组作为唯一实例变量的类。我必须使用构造函数和访问方法等,但困难的部分是创建一个高效的toString() 方法。

现在,我已将数组初始化为: private char[] tune = new char[5];

我的 toString() 方法如下所示:

public String toString() {
        return notes[0] + " " + notes[1] + " " + notes[2] + " " + notes[3] + " " + notes[4];
    }

我的问题是:有没有更有效的打印方法。我想到了用for循环,如下图:

for(int i = 0; i <= tune.length; i++) {
            return tune[i] + " ";
        }

但我认为这会返回 tune[0] 并停止。

【问题讨论】:

  • 这能回答你的问题吗? What's the simplest way to print a Java array?。基本上只是return Arrays.toString(notes)
  • 在你的第一个 sn-p 中连接元素有什么低效的地方?
  • 在循环外创建一个字符串,然后您可以在每次循环迭代的字符串中添加tune[i] + " "
  • @takendarkk 的输出会有所不同
  • @eis 我猜你是对的 - 我不确定是否需要 OP 显示的确切输出格式。

标签: java arrays oop tostring


【解决方案1】:

如果要覆盖 toString() 方法,请使用在循环外初始化的 StringBuilder

public String toString() {
  StringBuilder sb = new StringBuilder();
  for (char ch : array) { // you used both notes and tune arrays in your examples,
  // so I'm just going to use "array" as the variable name as an example
    sb.append(ch);
    sb.append(" ");
  }
  return sb.toString();
}

请注意,这会在末尾产生额外的空间,如果不需要,请改用:

public String toString() {
  StringBuilder sb = new StringBuilder();
  for (int i = 0; i < array.length - 1; i++) { // adds a space after every element
  // except for the last one, hence "i < array.length - 1"
    sb.append(array[i] + " ");
  }
  sb.append(array[array.length - 1]); // adds only the last element and no space
  // after
  return sb.toString();
}

希望这很容易理解!

注意 - Java 已经可以将 char[] 转换为字符串,但我假设您想更改它的操作方式。

【讨论】:

  • 如果您已经在使用 stringbuilder,为什么不使用 sb.append(ch); sb.append(" "); - 如果您正在使用 stringbuilder,使用 ch + " " 毫无意义
【解决方案2】:

数组已经内置了打印整个数组的方法。 (ArrayLists 不是这种情况)。

如果您在documentation 中查找Arrays,您可以看到有一个名为Arrays.toString() 的函数

这是一个如何使用它的示例。 字符串[] 数组 = 新字符串[] {"a","b","c"};

// Print out the Array
System.out.println(Arrays.toString(array));

// Output
[a,b,c]

如果您想打印从索引 a 到索引 b 的数组,那么使用 for... 循环会更好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-17
    • 2018-10-02
    相关资源
    最近更新 更多