代码:
class Foo
{
public static void main(String[] args)
{
int x[] = new int[5];
for(int i=0;i<5;i++)
x[i]=i*i;
for(int i=0;i<5;i++)
{
System.out.println("Value #" + i+1 + " = " + x[i]);
}
}
}
输出:
tk@insomniac-tk:~$ java Foo
Value #01 = 0
Value #11 = 1
Value #21 = 4
Value #31 = 9
Value #41 = 16
那么,这里发生了什么?我在哪里弄乱我的java代码?我的意思是为什么在Java中,i+1
字面意思是i
concat 1
?
答案 0 :(得分:4)
{{1}}
试试这个
答案 1 :(得分:4)
在Strings
+
运算符用于连接,因为您没有指定任何括号,i
和1
也是连贯的,您需要使用用括号明确表示它们是一起求和的:
for (int i = 0; i < 5; i++) {
System.out.println("Value #" + (i + 1) + " = " + x[i]);
}
获得:
Value #1 = 0
Value #2 = 1
Value #3 = 4
Value #4 = 9
Value #5 = 16
接下来,使用IntStream
的另一种方式,它将执行相同的操作:
IntStream.range(0, 5)
.mapToObj(i -> "Value #" + (i + 1) + " = " + (i * i))
.forEach(System.out::println);
答案 2 :(得分:2)
+表示像concat这样的东西,如果你想要评估表达式将它放入括号
(i + 1)不是i + 1
答案 3 :(得分:2)
这一行:
"Value #" + i+1 + " = " + x[i]
特别是
new StringBuffer().append("Value #")
.append(i)
.append(1)
.append(" = ")
.append(x[i])
.toString();
以下代码的语法糖:
"Value #" + (i+1) + " = " + x[i]
你想要的是这个:
new StringBuffer().append("Value #")
.append(i+1)
.append(" = ")
.append(x[i])
.toString();
哪个会转换为
NSMutableArray
答案 4 :(得分:2)
因为在这种情况下,Java会将i
附加到您的String,然后将1附加到您的String。
要首先评估该值(并生成您期望的结果),您必须使用括号通知Java您要在附加值之前评估该值:
System.out.println("Value #" + (i+1) + " = " + x[i]);
<强>输出强>
Value #1 = 0
Value #2 = 1
Value #3 = 4
Value #4 = 9
Value #5 = 16
答案 5 :(得分:2)
Java和C ++程序不同的关键原因是因为使用的运算符不同:
+
<<
运算符有一个higher precedence,因此在重载的+
运算符之前完成了添加。
在Java版本中,它全部是{{1}},所以它们都是从左到右评估的。
答案 6 :(得分:0)
问题出现在system.out.println(“”);,其中所有整数在使用(+)添加字符串变量时将并入字符串。尝试使用整数和字符串变量进行不同操作的不同代码。
答案 7 :(得分:-2)
您不能简单地将整数添加到字符串中。您必须使用Integer.toString(int)将整数转换为字符串,然后将返回的值添加到字符串中。