繁体   English   中英

Java字符串连接到整数算术

[英]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)

  • 字符串与HOOOOOOLD串联在一起! 已检测到括号。
  • 执行括号=>结果为整数
  • 通过串联字符串和结果整数继续。

该示例也可能很有见地:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM