如何使用非void方法打印String数组?

时间:2018-02-22 14:18:56

标签: java arrays printing

所以我应该写一个方法来打印数组的元素。我就这样做了:

   public static void join(String phrase[])
  {
    for (int i = 0; i < phrase.length; i++)
    {
      System.out.print(phrase[i] + " ");
    }
  }

这段代码有效,但是教授说我们必须用这种方法返回一个字符串,而且我不知道如何这样做。我试过了:

 public static String join(String phrase[])
  {
    for (int i = 0; i < phrase.length; i++)
    {
      String sentence = System.out.print(phrase[i] + " ");
      return sentence;
    }
  }
Error: incompatible types: void cannot be converted to java.lang.String

我知道我不能使用.print因为该方法不是无效的。但是,我怎么打印?

有什么想法吗?这是一个初学的Java课程,所以我不知道其他任何方式。

4 个答案:

答案 0 :(得分:2)

这也有效:

public static String join(String phrase[])
  {
    String sentence = "";
    for (int i = 0; i < phrase.length; i++)
    {
      sentence += phrase[i] + " ";
    }
    return sentence;
  }

以下是我正在做的事情:

1)在for循环外创建一个空字符串,用于保存数组的所有值

2)使用sentence += phrase[i] + " ";

将数组的每个元素(后面带空格)添加到字符串

3)一旦for循环将所有元素添加到字符串中,返回它!

答案 1 :(得分:1)

  1. System.out.println return void
  2. 您无法将void分配给String变量。您只想分配连接值,而不是打印它。

    String sentence = phrase[i] + " "
    
    1. 您在每次迭代时声明sentence
    2. 你需要连接每个单元格,所以在循环之前声明一个变量并在循环中附加String

      String sentence = "";
      for (int i = 0; i < phrase.length; i++){
          sentence +=  phrase[i] + " "; //same as sentence = sentence + phrase[i] + " ";
          return sentence;
      }
      
      1. 您在循环中返回一个值...
      2. 循环将以return结束,因此String中只会出现第一个值。只有在完成循环后才返回值。

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

        仅供参考:在同样的问题中,如果数组为空,则不返回任何值,因此它也是一个问题,因为方法应该在每种情况下都返回String(或抛出异常。) / p>

        更短的解决方案:

        从Java 8

        开始,可以使用String.join简单地完成此循环
        return String.join(" ", phrase);
        

答案 2 :(得分:1)

请执行以下操作:

public static String join(String phrase[]){
    StringBuilder str = new StringBuilder();
    for(String s: phrase){
        str.append(s);
    }
    System.out.println(str);
    return str.toString();
  }

不要使用+ =并将字符串数组的值添加到另一个字符串,因为每次向预处理字符串添加新字符串时它都会创建一个新对象。而是使用更高内存效率的StringBuilder。

您还可以执行以下操作:

public static String join(String phrase[]){
    String str = Arrays.toString(phrase);
    System.out.println(str);
    return str;
}

答案 3 :(得分:0)

这将打印每个元素并返回整个结果:

public static String printElements(String phrase[]) {
    String result = "";
    for (int i = 0; i < phrase.length; i++)
    {
        System.out.print(phrase[i] + " ");
        result += phrase[i];     
        if( i != phrase.length - 1)
        {
            result += " ";
        }

    }
        return result;
}