下面的代码返回一个奇怪的结果。问题是在第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);
}
}
答案 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]);