本系列博客習題來自《算法(第四版)》旨椒,算是本人的讀書筆記,如果有人在讀這本書的堵漱,歡迎大家多多交流综慎。為了方便討論,本人新建了一個微信群(算法交流)勤庐,想要加入的示惊,請?zhí)砑游业奈⑿盘枺簔hujinhui207407 謝謝。另外愉镰,本人的個人博客 http://www.kyson.cn 也在不停的更新中米罚,歡迎一起討論
知識點
- Queue的enqueue、dequeue
題目
1.3.15 編寫一個Queue的用例丈探,接受一個命令行參數(shù)k并打印出標準輸入中的倒數(shù)第k個字符串(假設標準輸入中至少有k個字符串)录择。
1.3.15 Write a Queue client that takes a command-line argument k and prints the kth from the last string found on standard input (assuming that standard input has k or more strings).
分析
本人所有簡書的算法文章詳細分析已經移入小專欄:算法四習題詳解,歡迎大家訂閱
答案
public class QueueExecise1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
String a[] =
{
"我的",
"名字",
"叫",
"頂級程序員不穿女裝",
"微博:https://m.weibo.cn/p/1005056186766482"
};
int k = 3;
Queue<String> stringQueue = new Queue<String>();
for (int i = 0; i < a.length; ++i) {
stringQueue.enqueue(a[i]);
}
int index = a.length - k;
for (int j = 0; j <= index; ++j) {
String dequeuedString = stringQueue.dequeue();
if (j == index)
System.out.print(dequeuedString);
}
}
}
代碼索引
題目
1.3.16 使用1.3.1.5節(jié)中的readInts()作為模板為Date編寫一個靜態(tài)方法readDates()碗降,從標準輸入中讀取由練習1.2.19的表格所指定的格式的多個日期并返回一個它們的數(shù)組隘竭。
1.3.16 Using readInts() on page 126 as a model,write a static method readDates() for Date that reads dates from standard input in the format specified in the table on page 119 and returns an array containing them.
分析
看英文部分寫的是,126 頁讼渊,只是中文翻譯的時候改成了1.3.1.5
下面是中文版的部分
對照著英文版:
為了方便沒有從前往后看的讀者理解readInts這個方法动看,我這里拉取了In的API,以及實現(xiàn)代碼如下
參照習題1.2.19完成readDates()即可爪幻。
答案
public class Date1 {
private int month;
private int day;
private int year;
public Date1(String date) {
String[] fields = date.split("/");
month = Integer.parseInt(fields[0]);
day = Integer.parseInt(fields[1]);
year = Integer.parseInt(fields[2]);
}
public String toString() {
return "" + month + "/" + day + "/" + year;
}
public static Date1[] readDates(String name) {
In in = new In(name);
Queue<Date1> q = new Queue<Date1>();
while (!in.isEmpty()) {
String readedString = in.readString();
Date1 date1 = new Date1(readedString);
q.enqueue(date1);
}
int N = q.size();
Date1[] a = new Date1[N];
for (int i = 0; i < N; i++)
a[i] = q.dequeue();
return a;
}
public static void main(String[] args) {
String filePathString = System.getProperty("user.dir");
String dateFileString = filePathString
+ "/src/com/kyson/chapter1/section3/" + "b.txt";
System.out.println("即將讀取" + dateFileString + "文件中得到的數(shù)組為:");
Date1[] date1 = readDates(dateFileString);
System.out.println("讀取文件中得到的數(shù)組為:");
for (int i = 0; i < date1.length; i++) {
System.out.println(date1[i]);
}
}
}
代碼索引
題目
1.3.17 為Transaction 類完成練習1.3.16
1.3.17 DoExercise 1.3.16 for Transaction.
分析
這里不以"/"為分隔符了菱皆,用"-"做分隔符,其他部分都是一樣的挨稿。
答案
public class Transaction1 {
private Date1 when;
private String who;
private double amount;
public Transaction1(String date) {
String[] fields = date.split("-");
when = new Date1(fields[0]);
who = fields[1];
amount = Integer.parseInt(fields[2]);
}
public String toString() {
return "" + this.who + " at " + this.when + " transaction "
+ this.amount;
}
public static Transaction1[] readTransactions(String name) {
In in = new In(name);
Queue<Transaction1> q = new Queue<Transaction1>();
while (!in.isEmpty()) {
String readedString = in.readString();
Transaction1 transaction1 = new Transaction1(readedString);
q.enqueue(transaction1);
}
int N = q.size();
Transaction1[] a = new Transaction1[N];
for (int i = 0; i < N; i++)
a[i] = q.dequeue();
return a;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
String filePathString = System.getProperty("user.dir");
String intFileString = filePathString
+ "/src/com/kyson/chapter1/section3/" + "c.txt";
System.out.println("即將讀取" + intFileString + "文件中得到的數(shù)組為:");
Transaction1[] transaction1s = readTransactions(intFileString);
System.out.println("讀取文件中得到的數(shù)組為:");
for (int i = 0; i < transaction1s.length; i++) {
System.out.println(transaction1s[i]);
}
}
}
代碼分析
//獲得程序當前路徑
System.getProperty(“user.dir”)
思考
16仇轻、17的意義在于,它讓我們知道如何讀取并正確輸出信息叶组。就是【先enqueue后dequeue】
代碼索引
視頻講解
廣告
我的首款個人開發(fā)的APP壁紙寶貝上線了,歡迎大家下載历造。