Java- for loop using << operator -


i'm stuying code , don't understand line does: [(y << 3) + x]

    (int y = 0; y <= 7; ++y) {             (int x = 0; x <= 7; ++x) {                 final string piececode = piececodes[(y << 3) + x];                 if (piececode.length() != 2) throw new illegalargumentexception();                 if (!piececode.equals("--")) {                     pieces[((7 - y) << 3) + x] = checkerspiece.valueof(piececode.charat(0), piececode.charat(1));                    }             }         } 

(y << 3) means bit shifting 3 times left. it's same multiplying 2^3 = 8. so, whole expression (y << 3) + x becomes y * 8 + x.

it should written in form y * 8 + x, because it's more readable , there no performance gain. premature optimization root of evil. it's better left such micro optimizations compiler (or jvm).

moreover, board size stored in constant, have in 1 place:

final int size = 8; // ... (int y = 0; y < size; y++) {     (int x = 0; x < size; x++) {         final string piececode = piececodes[y * size + x]; 

y * 8 + x iterating on (logically) 2d table 8 rows , columns, stored 1d, 64 cells.

as final remark, point out, in given code piececodes array of strings... in fact, it's array of piece codes. not some strings. now, "--" works magic state , nobody except programmer knows, means. if (piececode.length() != 2) looks bad. so, there should object piececode , array declared piececode[] piececodes. in piececode can implement proper equals() method. if piececode state, can enum. example empty, white_pawn, white_queen, black_pawn, black_queen. comparing strings not fast comparing enums. have watch out write equals(), instead of ==.


Comments

Popular posts from this blog

curl - PHP fsockopen help required -

HTTP/1.0 407 Proxy Authentication Required PHP -

c# - Resource not found error -