第二周仍然是學(xué)習(xí),任務(wù)如下:
1.java基礎(chǔ)知識(shí)回顧:java編程思想7-15章智绸,并用面向?qū)ο蟮乃枷肽M漢諾塔游戲
(1)初始時(shí)盤(pán)子數(shù)量
(2)每一步輸入:從塔x 移動(dòng)到塔y 决记,并判斷是否可以進(jìn)行移動(dòng)。
(3)移動(dòng)后打印當(dāng)前各個(gè)塔的盤(pán)子狀態(tài)
2.學(xué)習(xí)java8:函數(shù)接口桐汤,stream垢夹,lambda等特性溢吻,并利用新特性完成以下題目:
(1)輸入姓名后,使用接口隨機(jī)初始用戶User類果元,包括性別促王,年齡
(2)對(duì)男性按年齡升序排序輸出,對(duì)女性按年齡降序排序輸出而晒。
(3)設(shè)計(jì)實(shí)驗(yàn)蝇狼,對(duì)比傳統(tǒng)方法與stream性能差異
當(dāng)時(shí)看到任務(wù),內(nèi)心是崩潰的倡怎,7-16章是什么鬼迅耘,上周還是200頁(yè)的讀書(shū)量,這周就變成了都讀完监署。讀書(shū)量增加了3倍不止......颤专,再加上上周看的基本都是基本語(yǔ)法,都是大家最熟悉的焦匈,后面的難度增強(qiáng)血公,意味著需要更長(zhǎng)時(shí)間去消化......,內(nèi)心壓力劇增缓熟,不過(guò)經(jīng)過(guò)周一一天的調(diào)整,心態(tài)就過(guò)來(lái)了摔笤,有壓力才有動(dòng)力嘛够滑。
這一周自己的安排如下:
周一 閱讀第七、八章
周二 閱讀第九章吕世,完成漢諾塔問(wèn)題
周三 閱讀第十彰触、十一章,了解JAVA8新特性
周四 閱讀第十二命辖、十三章况毅,完成JAVA8題目
周五 閱讀第十四分蓖、十五章,總結(jié)匯報(bào)
不要問(wèn)我每天怎么完成的尔许,每天七點(diǎn)起床么鹤,八點(diǎn)坐在工位開(kāi)始學(xué)習(xí)(別人都是九點(diǎn)半慢悠悠過(guò)來(lái)吃早餐,淚奔)味廊,晚上固定學(xué)習(xí)到十點(diǎn)蒸甜,收拾休息一個(gè)小時(shí),十一點(diǎn)準(zhǔn)時(shí)睡覺(jué)(不過(guò)作息是真的規(guī)律了)余佛。
下午匯報(bào)柠新,照例是部門(mén)老大、師傅和幾個(gè)同事圍觀辉巡,問(wèn)了幾個(gè)問(wèn)題恨憎,一臉懵懂,但勉強(qiáng)在師傅的幫助下過(guò)關(guān)郊楣。最后的最后框咙,沒(méi)想到老大說(shuō):來(lái)看代碼吧!(內(nèi)心:......因?yàn)樽约簩?xiě)代碼就是給自己看奔著實(shí)現(xiàn)功能去的痢甘。)結(jié)果被老大從頭委婉的說(shuō)到尾:
為什么沒(méi)有注釋喇嘱?
為什么類和方法不聲明為public,你這樣讓別人怎么調(diào)用你的包塞栅?
怎么有的地方還有空行者铜?
還犯了個(gè)String比較的傻帽問(wèn)題......字符串比較你怎么用“==”?
你把stream流寫(xiě)這么長(zhǎng)也不換行放椰,讓別人怎么看....師傅忙說(shuō):按Ctrl+A作烟,Ctrl+Shift+F。結(jié)果悲催......不管用砾医。機(jī)智的師傅說(shuō):哦拿撩,你的快捷鍵被搜狗輸入法占用了。(回去趕緊就把占用鍵改了回來(lái).......)
總之如蚜,給我的感覺(jué)就是压恒,大佬們把代碼都是當(dāng)做藝術(shù)品進(jìn)行雕琢的,不是我這種渣渣只是為了實(shí)現(xiàn)功能而寫(xiě)的不堪入目的東西错邦。
最后把我的不堪入目的代碼放上來(lái)給大家嘲笑一下探赫。
漢諾塔問(wèn)題(實(shí)現(xiàn)個(gè)漢諾塔小游戲):
class Plate {
private int size;
Plate(int size) {
this.size = size;
}
int getSize () {
return this.size;
}
}
class Tower {
private Stack<Plate> stack;
private int length=0;
Tower(){
this.stack = new Stack<>();
}
int getLength(){
return length;
}
Plate popPlate () {
if(length==0){return null;}
else{length--;return this.stack.pop();}
}
void pushPlate(Plate plate) {
this.stack.push(plate);
length++;
}
Plate peekPlate() {
return this.stack.peek();
}
boolean towerIsEmpty() {
return this.stack.empty();
}
Plate[] printTower(){
if(length==0) return null;
else{
Plate[] p=new Plate[length];
int i=0;
while(!towerIsEmpty()){
p[i]=this.stack.pop();
i++;
}
i--;
while(i!=0){
this.stack.push(p[i]);
i--;
}
this.stack.push(p[i]);
return p;}
}
}
public class MyHanoi {
static void printTowers(Tower[] t){
for(int i=0;i<3;i++){
System.out.print("塔"+i+"的狀態(tài):");
if(t[i].printTower()==null) System.out.println("空");
else{
Plate[] p=t[i].printTower();
for(int j=0;j<p.length;j++){
System.out.print(" "+p[j].getSize());
}
System.out.println();
}
}
}
static void move(Tower from ,Tower to) {
if(from.towerIsEmpty()) System.out.println("您的移動(dòng)不符合要求");
else{
if (to.towerIsEmpty() || from.peekPlate().getSize() < to.peekPlate().getSize()) {
to.pushPlate(from.popPlate());
} else {
System.out.println("您的移動(dòng)不符合要求");
}
}
}
public static void main(String args[]){
System.out.print("游戲開(kāi)始,請(qǐng)輸入盤(pán)子的數(shù)量:");
Scanner in=new Scanner(System.in);
int plateNum=in.nextInt();
Plate[] plate=new Plate[plateNum];
for(int i=0;i<plateNum;i++){
plate[i]=new Plate(i);
}
Tower[] towers = new Tower[3];
for (int i = 0; i < 3; i++){
towers[i] = new Tower();
}
for (int i = 1; i <= plateNum; i++) {
towers[0].pushPlate(plate[plateNum-i]);
}
System.out.println("游戲初始狀態(tài)撬呢,默認(rèn)從塔頂部到塔底部顯示");
printTowers(towers);
System.out.println("游戲開(kāi)始伦吠,請(qǐng)輸入移動(dòng)過(guò)程(例:將盤(pán)子從塔0移動(dòng)到塔2,請(qǐng)輸入:0 2):");
while(towers[2].getLength()!=plateNum){
int fromTower=in.nextInt();
int toTower=in.nextInt();
move(towers[fromTower],towers[toTower]);
printTowers(towers);
}
System.out.println("恭喜你完成游戲!");
}
}
JAVA8題目:
import java.util.Arrays;
import java.util.List;
import java.util.Random;
import java.util.function.Supplier;
import java.util.stream.*;
class User {
private String[] s = { "Male", "Female" };
private final int sexIndex = new Random().nextInt(2);
private String sex = s[sexIndex];
private final int age = new Random().nextInt(100);
private String name;
public void setName(String name) {
this.name = name;
}
public static User create(final Supplier<User> supplier, String name) {
User user = supplier.get();
user.setName(name);
return user;
}
public String getSex() {
return this.sex;
}
public int getAge() {
return this.age;
}
public String getName() {
return this.name;
}
}
public class MyUserDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
List<User> users = Arrays
.asList(User.create(User::new, "Lily"),
User.create(User::new, "Lisa"),
User.create(User::new, "Tom"),
User.create(User::new, "Linda"),
User.create(User::new, "Joan"),
User.create(User::new, "Nike"),
User.create(User::new, "Betty"),
User.create(User::new, "Jelly"),
User.create(User::new, "Jerry"),
User.create(User::new, "Jane"));
List<Integer> sortedMale = users.stream()
.filter(user -> user.getSex().equals("Male"))
.sorted((o1, o2) -> o1.getAge() - o2.getAge())
.map(User::getAge).collect(Collectors.toList());
System.out.println("男性按年齡升序排序輸出:" + sortedMale);
List<Integer> sortedFemale = users.stream()
.filter(user -> user.getSex().equals("Female"))
.sorted((o1, o2) -> o2.getAge() - o1.getAge())
.map(User::getAge).collect(Collectors.toList());
System.out.println("女性按年齡降序排序輸出:" + sortedFemale);
}
}