2015年3月10日 星期二

lamj 筆記 1

1.

A: initialization
B: end condition
C: adjustment

  1. for ( A  ;  B  ;  C ) {
  2.            D
  3. }   

  4. E


次序 A -> B ->  true -> D -> C -> B -> true -> D -> C -> B -> false -> E;

 ------------------------------


2.

  1.  int a = 10;

  2.  System.out.println(a++);   // a = a + 1; 
  3.  System.out.println(a+3);  
  4.  System.out.println(a+=3);  // a = a + 3;
  5.  System.out.println(++a);    // a = 1+a;
  6.  System.out.println(a*2);   
  7.  System.out.println(a*=2);  // a = a * 2;
  8.  System.out.println(a/=a);  // a = a / a;
  9.  System.out.println(a%a);   
  10.  System.out.println((a));   
 


line    ans:
3.      10
4.      14
5.      14
6.      15
7.      30
8.      30
9.      1
10.    0
11.    1


Comment :

由於電腦read statement的方式是由左至右,所以以下兩句的output會有分別:
1. System.out.println(++a);
2. System.out.println(a++);

1 是prefix increment, 即先call ++ function ,後再println 變量 a 的值。
2 是postfix increment, 即先println 變量a的值,後再call  ++ function。



另外,

1. int a = 10;
2. int b = (a*=2);

line 2 的運作是想把一個"整數值"賦予給int類別的變量b ,而這個值需要由 (a*=2) 中拿出來 ,
但必須經過一輪運算 ,除非是 int b = a; ,你直接知道右邊的值。
而 a*=2; 中, 電腦看到 *= or /= or %= or += or -= or ++ or -- , 都會call 一個function 出來
去改變自身的值, 與 * or / or % or + 這些不同,不會改變自己的值;
所以, a*=2 會先做一個動作 a = a*2; 然後再彈出 a的值出來,即20。 此時,你就可以知道右邊的值是20了。
int b = (a*=2); 和 int b = a*=2; 是一樣意思


沒有留言:

張貼留言