I********y 发帖数: 228 | 1 面试遇到一code review的题目,blabla了一顿,回来后也不知道是不是改对了。
贴给大家看看。讨论下。我只是把expensive的pow改成了按位或。不知道有没有其他陷
阱。 |
e****e 发帖数: 418 | 2 public class PlaylistFlagsParametersWrapper {
private boolean[] accessArray = new boolean[8];
public PlaylistFlagsParametersWrapper(PlaylistFlagsParameters
playlistFlagsParameters) {
accessArray[0] = playlistFlagsParameters.access0;
accessArray[1] = playlistFlagsParameters.access1;
accessArray[2] = playlistFlagsParameters.access2;
accessArray[3] = playlistFlagsParameters.access3;
accessArray[4] = playlistFlagsParameters.access4;
accessArray[5] = playlistFlagsParameters.access5;
accessArray[6] = playlistFlagsParameters.access6;
accessArray[7] = playlistFlagsParameters.access7;
}
public boolean[] getAccessArray() {
return accessArray;
}
}
private static byte getHopperAccessCode(PlaylistFlagsParametersWrapper
wrapper) {
byte accessCode = 0;
boolean[] accessArray = wrapper.getAccessArray();
for ( int i = 0; i < accessArray.length; i++ ) {
if( accessArray[i] == true )
accessCode = ( byte ) ( accessCode | (byte)( 1 << i ) );
}
return accessCode;
} |
y****n 发帖数: 743 | 3 作为Code Review源代码主要有两个问题:
- double有精度问题,最后转换成byte有可能会出错。
- Math.Pow是很费时的操作,尽量采用位运算和加减法。 |
a*********8 发帖数: 17 | 4 有其他要求不?没有的话直接hardcode也一样吧,不用pow了
int accessCode = 0;
if(playlistFlagsParameters.Access0)
accessCode = 1;
if(playlistFlagsParameters.Access1)
accessCode += 2;
if(playlistFlagsParameters.Access2)
accessCode += 4;
if(playlistFlagsParameters.Access3)
accessCode += 8;
if(playlistFlagsParameters.Access4)
accessCode += 16;
if(playlistFlagsParameters.Access5)
accessCode += 32;
if(playlistFlagsParameters.Access6)
accessCode += 64;
if(playlistFlagsParameters.Access7)
accessCode += 128;
return Convert.ToByte(accessCode); |
f********d 发帖数: 51 | 5 private int getAccessCode(int idx, PlaylistFlagParameter parameter) {
Field field = PlaylistFlagParameter.class.getDeclaredMethod("Access" + idx
);
if (field.getBoolean(parameter)) {
return 1<
}
return 0;
}
private static byte getHopperAccessCode(PlaylistFlagsParametersWrapper
wrapper) {
int bitflag = 0;
for (int i = 0; i < 8; i++) {
bitflag += getAccessCode(i, wrapper);
}
return (byte)bitflag;
} |
J*********r 发帖数: 5921 | |