本系列博客習(xí)題來自《算法(第四版)》,算是本人的讀書筆記损痰,如果有人在讀這本書的,歡迎大家多多交流酒来。為了方便討論卢未,本人新建了一個(gè)微信群(算法交流),想要加入的堰汉,請?zhí)砑游业奈⑿盘枺簔hujinhui207407 謝謝辽社。另外,本人的個(gè)人博客 http://www.kyson.cn 也在不停的更新中翘鸭,歡迎一起討論
知識點(diǎn)
- java的基本語法
- 十進(jìn)制與二進(jìn)制的轉(zhuǎn)換
- 一維數(shù)組的逆序輸出
- 二維數(shù)組的轉(zhuǎn)置(交換行與列)
題目
1.1.8 給出以下表達(dá)式的值:
a. System.out.println('b');
b. System.out.println('b' + 'c');
c. System.out.println((char) ('a' + 4));
分析
b的ASCII碼為98滴铅,c的為99
答案
b
197
e
題目
1.1.9編寫一段代碼,將一個(gè)正整數(shù) N 用二進(jìn)制表示并轉(zhuǎn)換為一個(gè) String 類型的值 s就乓。
解答:Java 有一個(gè)內(nèi)置方法 Integer.toBinaryString(N) 專門完成這個(gè)任務(wù)汉匙,但該題的目的就是給出這個(gè)方法的其他實(shí)現(xiàn)方法拱烁。下面就是一個(gè)特別簡潔的答案:
String s = "";
for (int n = N; n > 0; n /= 2)
s = (n % 2) + s;
分析
雖然夠簡潔,但效率不怎么樣噩翠,Java源碼的的實(shí)現(xiàn)效率可以戏自,源碼地址:Java Integer 源碼
答案
public static String decimalToBinary(int n) {
String resultString = "";
for (int i = 31; i >= 0; i--)
resultString = resultString + (n >>> i & 1);
return resultString;
}
代碼索引
1.1.10 下面這段代碼有什么問題?
int[] a;
for (int i = 0; i < 10; i++)
a[i] = i * i;
解答:它沒有用 new 為 a[] 分配內(nèi)存。這段代碼會(huì)產(chǎn)生一個(gè) variable a might not have been initialized 的編譯錯(cuò)誤伤锚。
1.1.11 編寫一段代碼浦妄,打印出一個(gè)二維布爾數(shù)組的內(nèi)容。其中见芹,使用 * 表示真剂娄,空格表示假。打印出行號和列號玄呛。
private static void printout(boolean[][] a1){
for (int i = 0; i < a1.length; i++) {
for (int j = 0; j < a1[i].length; j++) {
if (a1[i][j]){
System.out.println(String.format(Locale.CHINA,"%d %d *",i+1,j+1));
} else {
System.out.println(String.format(Locale.CHINA,"%d %d /",i+1,j+1));
}
}
}
}
1.1.12 以下代碼段會(huì)打印出什么結(jié)果?
int[] a = new int[10];
for (int i = 0; i < 10; i++)
a[i] = 9 - i;
for (int i = 0; i < 10; i++)
a[i] = a[a[i]];
for (int i = 0; i < 10; i++)
System.out.println(a[i]);
/**網(wǎng)上看到的電子書的最后一句都有誤阅懦,是
System.out.println(i);
應(yīng)該是System.out.println(a[i]);所以這里改掉了
**/
答案
0
1
2
3
4
4
3
2
1
0
1.1.13 編寫一段代碼,打印出一個(gè) M 行 N 列的二維數(shù)組的轉(zhuǎn)置(交換行和列)徘铝。
答案
int[ ][ ] a={{1,2,3},{4,5,6}};
int[][] temp = new int[a[0].length][a.length];
for (int i = 0; i < a[0].length; i++) {
for (int j = 0; j < a.length; j++) {
temp[i][j] = a[j][i];
System.out.print(temp[i][j] + " ");
if(j == a.length - 1)
System.out.print("\n");
}
}
1.1.14 編寫一個(gè)靜態(tài)方法 lg()耳胎,接受一個(gè)整型參數(shù) N,返回不大于 log2N 的最大整數(shù)惕它。不要使用 Math 庫怕午。
private static int lg(int N) {
int product = 1;
int x = -1;
while (product <= N) //*,把等于的情況也納入進(jìn)來淹魄,從而避免了在如23>5這種情況的自增導(dǎo)致輸出結(jié)果為3的情況
{
product *= 2;
x++;
}
return x;
}
public static void main(String args[]) {
int N = 100;
System.out.print(lg(N));
}
廣告
我的首款個(gè)人開發(fā)的APP壁紙寶貝上線了郁惜,歡迎大家下載。