打印在Java中连接的多个数组元素

时间:2017-08-13 16:16:03

标签: java string-concatenation

下面的代码返回一个奇怪的结果。问题是在第46行。 将String作为参数添加到println可以解决问题

System.out.println("result" + arr[i] + arr[j]+ arr[k]);
System.out.print("\n" + arr[i] + arr[j]+ arr[k]);

我不明白为什么println不起作用。是否不能在不在java中插入字符串的情况下连接数组元素?

import java.util.Scanner;
public class Main 
{
    public static void main(String Args[])
    {
        System.out.print("How many digits: ");
        Scanner obj = new Scanner(System.in);
        int n = obj.nextInt();
        int[] arr = new int[n];
        for(int i=0; i<n; i++)
        {
            System.out.print("Enter number "+ (i+1) +": ");
            arr[i]=obj.nextInt();
        }
        combinations(arr);
    }

    public static void combinations(int[] arr) {
        int count=0;
        for(int i=0; i<arr.length; i++) {
            for(int j=0; j<arr.length; j++) {
                for(int k=0; k<arr.length; k++) {
                    System.out.println(arr[i] + arr[j]+ arr[k]);//Line 46 
                    count++;
                }
            }
        }
        System.out.print("\n" + "Total combinations: "+ count);
    }
}

2 个答案:

答案 0 :(得分:5)

这是因为+运算符根据其操作数具有不同的行为:要么添加数字,要么连接字符串。

您已将阵列声明为[int]。这意味着当你这样做时:

arr[i] + arr[j]+ arr[k];

您正在计算返回int的三个int的总和。这被定义为in the Java specification

  

二进制+运算符在应用于两个数值类型的操作数时执行加法,产生操作数的总和。

然而,当你写:

"result" + arr[i] + arr[j]+ arr[k];

因为第一个元素是String,Java会将所有其他元素转换为String并将它们连接在一起。

in the Java specification描述为:

  

如果只有一个操作数表达式是String类型,则在另一个操作数上执行字符串转换以在运行时生成字符串。

最后,当您致电System.out.println时,它会首先评估作为参数给出的表达式,然后检查其类型是否为String并在其上调用toString,如果不是。

答案 1 :(得分:1)

System.out.println(arr[i] + arr[j]+ arr[k]);

当它运行时,它会找到彼此相邻的ints,因此它们将它们相加

所以规则很简单:

  • String + anythingElse:连接
  • Number + Number:sum(int, double, float, ...)

为避免您必须在分隔符之间添加空String

System.out.println(arr[i] + ""+ arr[j] +""+ arr[k]);
System.out.println(arr[i] + "-"+ arr[j] +"-"+ arr[k]);