我开始学习Java ..我很兴奋。
第一个代码不是我想要的返回结果..
import java.util.Scanner;
public class Yusuf
{
public static void main(String args[])
{
Scanner text = new Scanner(System.in);
int a,b;
System.out.print("Enter first number:");
a = text.nextInt();
System.out.print("Enter second number:");
b = text.nextInt();
System.out.print("a + b = " + a+b);
}
}
此代码的结果为“a + b = 1525”(如果a = 15且b = 25(例如我给出随机数))
为什么上面的代码不起作用,比如这段代码:
import java.util.Scanner;
public class Yusuf
{
public static void main(String args[])
{
Scanner text = new Scanner(System.in);
int a,b,c;
System.out.print("Enter first number:");
a = text.nextInt();
System.out.print("Enter second number:");
b = text.nextInt();
c = a+b;
System.out.print("a + b = " + c);
}
}
此代码返回40为相同的数字.. 有什么不同?我绝对需要使用不同的变量吗?
答案 0 :(得分:4)
与字符串一起使用时,+
运算符会进行字符串连接。如果您使用+
将数字添加到字符串的末尾,则数字将首先转换为字符串。
您的陈述:
System.out.print("a + b = " + a+b);
获取字符串"a + b"
并将a
中的值连接为字符串,然后将b
中的值连接为字符串。
如果你这样做,它应该按照你想要的方式工作:
System.out.print("a + b = " + (a+b) );
(a+b)
的额外parens将导致在字符串连接发生之前评估该添加(作为int
添加)。
答案 1 :(得分:0)
+
并不总是意味着加法。与字符串一起使用时,它会进行连接。
当你这样做时
System.out.print("a + b = " + a+b);
您正在将a
和b
连接到字符串上。
换句话说,你正在做
(("a + b = " + a) + b);
评估为
"a + b = 15" + b
评估为
"a + b = 1525"
当你这样做时
c=a+b
然后
System.out.print("a + b = " + c);
首先添加 ,然后将结果值(40)连接到字符串上。
答案 2 :(得分:0)
在你说"a + b = " + a + b
的第一段代码中,你正在进行字符串连接。无论你添加到字符串中的是什么都将成为一个字符串。
在您的示例中,
首先"a + b = " + a
将成为"a + b = 15"
,然后b将被联系。
因此,它将成为a + b = 1525
在第二个示例中,您分别进行添加,然后连接到字符串。所以你得到了理想的结果。
你也可以做"a + b = " + (a + b)
。
答案 3 :(得分:0)
问题出在这一行:
System.out.print("a + b = " + a+b);
'a + b'中的'+'运算符被解释为字符串连接而不是整数加法。
将其更改为:
System.out.print("a + b = " + (a+b));
您必须这样做的原因是'+'运算符的重载解析规则和基本Java运算符优先级规则的组合。
如果“+”的操作数是一个字符串,则运算符是字符串连接,非字符串操作数(如果有)将转换为字符串。
如果x op y op z
其中'op'是同一个运算符,那么它等同于(x op y) op z
。
如果将它们组合在一起,"a + b = " + a+b
(a
和b
为int
)相当于:
("a + b = " + a) + b
因此
"a + b = ".concat(Integer.toString(a)).concat(Integer.toString(b))
更正后的版本"a + b = " + (a + b)
相当于:
"a + b = ".concat(Integer.toString(a + b))
答案 4 :(得分:0)
只需执行System.out.print("a + b = " + (a+b));
,以便编译器能够理解它必须首先添加a and b
而不是连接。