摘要:問題農場一頭小母牛,母牛每年生母牛。母牛歲產母牛,年后多少牛前提第一頭母牛已經歲思路脈絡面向對象基本思想,注意狀態和行為,抽象出對應的屬性和方法思想考慮類母牛農場一開始可能不會想到把農場設計為一個類。
問題:
農場一頭小母牛,
母牛每年生母牛。
母牛5歲產母牛,
20年后多少牛?
PS:前提:第一頭母牛已經>=5歲
思路脈絡:
面向對象基本思想,注意狀態和行為,抽象出對應的屬性和方法
1、Object Oriented思想
考慮類:母牛、農場
PS:一開始可能不會想到把農場設計為一個類。但母牛是成長在農場里的,隨著時間推移,農場里的母牛數量不斷增長。
考慮屬性:母牛有age、農場有oldcows群體(age >= 5) 和 newcows群體(age < 5)。
考慮方法:母牛可以生產小母牛:produceCow() ;農場可以得到母牛總數 :getNums()
考慮類之間的關系:農場的屬性oldcows、newcows是母牛的對象集合
2、具體實現
類Cow:
public class Cow { private int age; //母牛屬性:年齡 public Cow(int age) { super(); this.age = age; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Cow produceCow() { if(age >= 5) { return new Cow(0); //若母牛年齡 >= 5歲,則生產小母牛 } return null; } }
類Farm:
import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class Farm { //農場的老母牛集合(age>=5)、小母牛集合(age<5) private static Listoldcows,newcows; static { oldcows = new ArrayList<>(); newcows = new ArrayList<>(); Cow cow=new Cow(5); //最初的5歲母牛 oldcows.add(cow); } //獲取第year年的母牛總數 public static void getNums(int year) { for(int i=0;i = 5) { oldcows.add(cow); newcows.remove(cow); break; //對java.util.ConcurrentModificationException的處理 } } for(Cow cow : oldcows) { Cow babycow = cow.produceCow(); newcows.add(babycow); } System.out.printf("第%d年農場有%d只母牛呢!%n", i+1, oldcows.size() + newcows.size()); } } }
主類:
public class Test { public static void main(String[] args) { Farm.getNums(20); } }
問題反思:
1、在方法produceCow()中,如果將生出的小baby設置為0歲:
return new Cow(0);
2、一開始運行時會報錯:java.util.ConcurrentModificationException(并發修改異常)
原因:在對newcows進行遍歷的時候,并發地對它進行了remove操作 解決:在remove操作后立即執行break跳出foreach語句。
3、在for(int i=0;i 引自: 一開始是將母牛age的++都寫到了newcows和oldcows各自的遍歷當中去的,但是這樣程序就會有bug:新的一年變成5歲的母牛被放入oldcows后,age再次被++。所以要進行一些修改。
https://blog.csdn.net/ac2017f...
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/76102.html
摘要:很多人將這一波的上漲解讀為比特幣小牛市的到來,無論從技術層面還是從消息層面來看,比特幣都有逐步回暖的跡象。到日,關于英雄鏈網絡詐騙案被破獲的報道便鋪天蓋地地傳播開來。 摘要:不在風口上,長了翅膀的項目同樣可以起飛,價值終究會超越時間。 showImg(https://segmentfault.com/img/bVbrS0N?w=4096&h=3575); 自四月初以來,比特幣就開啟了起...
摘要:很多人將這一波的上漲解讀為比特幣小牛市的到來,無論從技術層面還是從消息層面來看,比特幣都有逐步回暖的跡象。到日,關于英雄鏈網絡詐騙案被破獲的報道便鋪天蓋地地傳播開來。 摘要:不在風口上,長了翅膀的項目同樣可以起飛,價值終究會超越時間。 showImg(https://segmentfault.com/img/bVbrS0N?w=4096&h=3575); 自四月初以來,比特幣就開啟了起...
摘要:如果初學者接觸的第一門語言是,學習曲線則會平滑得多,掌握一些基本語法和內置的數據結構,已經可以上手寫一些小工具或者小型應用。如果你的學習時間充足,我的建議是一定要學數據結構和算法。 前言 Python是最容易入門的編程語言,沒有之一。如果初學者接觸的第一門語言是C或者C++,對他們來說最難的不是語法,而是容易出現內存泄漏、指針等問題。有時候排查這些問題對初學者的打擊很大,尤其是沒掌握排...
摘要:編者按本文作者為,主要介紹世上最怪異最難用的種編程語言。這些語言被稱為極品編程語言。創造它們的原因通常是為了測試編程語言設計的臨界,或者只是一個玩笑。就是母牛的編程語言設計時充分考慮了母牛的想法。 【編者按】本文作者為 Deepak Karanth,主要介紹世上最怪異、最難用的5種編程語言。文章系國內 ITOM 管理平臺 OneAPM 編譯呈現。 最難學編程語言有哪些?很多人都用過Ja...
閱讀 2485·2021-09-22 16:05
閱讀 2971·2021-09-10 11:24
閱讀 3645·2019-08-30 12:47
閱讀 2946·2019-08-29 15:42
閱讀 3390·2019-08-29 15:32
閱讀 1967·2019-08-26 11:48
閱讀 1092·2019-08-23 14:40
閱讀 906·2019-08-23 14:33