2014-02-12 56 views
0

我目前正在從java中進行任何練習,你會發現自午夜以來的秒數。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)); 

回答

3

添加括號在你的計算,操作順序從左至右排列的。

這將首先連接字符串與整數,而不是計算正確的值。

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 I T在那裏!括號已被檢測到。
  • 括號被執行=>結果是一個整數
  • 繼續串接字符串和結果整數。

此示例可能是有見地,以及:

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串
VAL 1
VAL 2
結果15

+0

+1「HOOOOLD IT RIGHT THERE」 – eqb

0

你真正想要的是這樣的:

int secondsSinceMidnight = intSecond + (intMinute*60) + (intHour*3600); 
    System.out.println("Seconds since midnight: " + secondsSinceMidnight); 

與實現是不計算整個secondsSinceMidnight價值的問題,而是它加到字符串中的每個整數。