[英]Java string concatenation to integer arithmetic
我目前正在通过Java思维进行任何练习,以找出自午夜以来的秒数。
当在前面加上字符串打印秒数时,似乎是在使用该字符串进行进一步的计算。 不管我如何排序,这两个结果都会给我不同的错误结果,就好像我删除了“自午夜以来的第二个:”字符串一样,它给了我正确的结果。 我已经加上括号以确保它遵循PEMDAS,但是我不明白该字符串如何使事情发生变化
String hour, minute, second;
Calendar cal = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
String theTime = sdf.format(cal.getTime()).toString();
hour = theTime.substring(0,2);
minute = theTime.substring(3,5);
second = theTime.substring(6,8);
int intHour = Integer.parseInt(hour);
int intMinute = Integer.parseInt(minute);
int intSecond = Integer.parseInt(second);
System.out.println("Seconds since midnight: " + (intHour * 3600) + (intMinute * 60) + intSecond);
System.out.println("Seconds since midnight: " + intSecond + (intMinute*60) + (intHour*3600));
在计算周围加上括号,运算顺序从左到右。
这将首先用整数连接字符串,而不是计算正确的值。
System.out.println("Seconds since midnight: " + (intSecond + (intMinute*60) + (intHour*3600)));
这是一个简化的示例:
int value1 = 5, value2 = 10;
System.out.println("result " + value1 + value2);
System.out.println("result " + (value1 + value2));
输出量
结果510
结果15
实际发生的细小故障。
情况1: "result " + value1 + value2
情况2: "result " + (value1 + value2)
该示例也可能很有见地:
public static void main(String[] args) {
System.out.println(valString() + (val1() + val2()));
}
static int val1() {
System.out.println("val 1");
return 5;
}
static int val2() {
System.out.println("val 2");
return 10;
}
static String valString() {
System.out.println("val string");
return "result ";
}
输出:
val字符串
值1
值2
结果15
您真正想要的是:
int secondsSinceMidnight = intSecond + (intMinute*60) + (intHour*3600);
System.out.println("Seconds since midnight: " + secondsSinceMidnight);
您的实现的问题在于,它不会计算整个secondsSinceMidnight值,而是将每个整数连接到字符串。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.