1.題型參考
2.應用題題庫參考
3.代碼
計算方式枚舉
public enum NormalSumType {
//加法
Addition,
//減法
Subtraction
}
工具類
import cn.hutool.core.util.RandomUtil;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class TopicUtil {
public static final List<String> Photos = Arrays.asList("?", "?", "?", "?", "?", "?", "?", "★", "?", "?", "?", "?", "?", "?");
public static final List<String> ApplicationTopicList = Arrays.asList(
"同學們要做28個燈籠,已做好18個,還要做多少個?",
"從花上飛走了36只蝴蝶淋淀,又飛走了25只捕捂,兩次飛走了多少只交掏?",
"飛機場上有75架飛機狱从,飛走了63架铐殃,現在機場上有飛機多少架剂府?",
"小蘋種7盆紅花,又種了同樣多的黃花慰照,兩種花共多少盆灶挟?",
"學校原有25瓶膠水,又買回19瓶毒租,現在有多少瓶稚铣?",
"小強家有36個蘋果,吃了7個,還有多少個惕医?",
"汽車總站有33輛汽車耕漱,開走了13輛,還有幾輛抬伺?",
"小朋友做剪紙 螟够,用了8張紅紙,又用了同樣多的黃紙峡钓,他們用了多少張紙妓笙?",
"馬場上有39匹馬,又來了52匹椒楣,現在馬場上有多少匹给郊?",
"商店有25把扇牡肉,賣去16把捧灰,現在有多少把?",
"學校有蘭花和菊花共65盆统锤,蘭花有26盆毛俏,菊花有幾盆?",
"小青兩次畫了17個 饲窿,第一次畫了9個煌寇,第二次畫了多少個?",
"小紅家有蘋果和梨子共33個逾雄,蘋果有14個阀溶,梨子有多少個?",
"學校要把42箱文具送給山區(qū)小學鸦泳,已送去27箱银锻,還要送幾箱?",
"家有11棵白菜做鹰,吃了5棵击纬,還有幾棵?",
"一條馬路兩旁各種上48棵樹钾麸,一共種樹多少棵更振?",
"從車場開走8輛汽車,還剩24輛饭尝,車場原來有多少汽車肯腕?",
"從車場開走8輛大汽車,又開走同樣多的小汽車钥平,兩次開走多少輛汽車大审?",
"學校體育室有6個足球 ,又買來26個坎匿,現在有多少個?",
"學雷鋒小組上午修了8張椅吭净,下午修了9張,一天修了多少張椅肴甸?",
"原來有22人看戲寂殉,來了13人,又走了6人原在,現在看戲的有多少人友扰?",
"面包房做了54個面包,第一組買了22個庶柿,第二組買了8個村怪,還剩多少個?",
"男生有22人浮庐,女生有21人甚负,其中有16人參加比賽,還有多少人沒參加审残?",
"三個小組一共收集了94個礦泉水瓶梭域,第一組收集了34個,第二組收集了29個搅轿,第三組收集了多少個病涨?",
"汽車里有41人,中途有13人上車璧坟,9人下車既穆,車上現在還有多少人?",
"小紅有28個氣球雀鹃,送給幼兒園小朋友15個幻工,還剩多少個?",
"小軍和小麗做燈籠褐澎,小軍做了21個会钝,小麗做了18個,送給老師50個工三,他們還要做多少個迁酸?",
"故事書有74頁,小麗第一天看了20頁俭正,第二天看了23頁奸鬓,還剩多少頁沒有看?",
"羊圈里原來有58只羊掸读,先走了6只串远,又走了7只宏多,現在還有多少只?",
"小東上午做了10道數學題澡罚,下午做的比上午多3道伸但,小東下午做了多少道?",
"小紅看故事書留搔,第一天看了15頁更胖,第二天看的比第一天少6頁,第二天看了多少頁隔显?",
"爸爸却妨、媽媽和哥哥都掰了9個玉米,我掰了6個括眠,我們家一共掰了多少個玉米彪标?",
"小明種了5行蘿卜,每行9個掷豺,共種了多少個捞烟?",
"食堂運來3車大米,每車8袋萌业,3車共多少袋坷襟?",
"我有50元奸柬,要買一件20元的衣服和一副10元的眼鏡生年,還剩多少元?",
"學校有50個面包廓奕,每個學生分9個抱婉,可以分給多少個學生?",
"爸爸買了4捆木頭桌粉,每捆12根蒸绩,全部共多少根?",
"媽媽給了小明50元錢铃肯,小明要買一本數學書20元患亿,還要買一個文具盒21元,媽媽給的錢夠嗎押逼?",
"一艘船可以載60人步藕,一年級有21人,二年級有22人挑格,三年級有15人咙冗,三個班的人夠坐嗎?",
"小明家有5張桌子漂彤,每張桌子夠坐8人雾消,他們家可以請多少人來做客灾搏?",
"小紅家有4塊地,每塊地里可以種20課菜立润,小紅家共種了多少棵白菜狂窑?",
"學校共有38個籃球,每班分7個桑腮,可以分給多少個班蕾域?",
"我家買了38個蘋果,我吃了8個到旦,哥哥吃了10個旨巷,還剩多少個?",
"商店共有西瓜56個添忘,上午買了15個采呐,下午買了21個,還有多少個沒買搁骑?",
"媽媽給小麗48元錢斧吐,買了一個書包還剩15元,這個書包多少錢仲器?",
"小軍拿了50元買了一個9元錢的文具盒煤率,小軍應找回多少元錢?",
"媽媽給我買了一件48元的衣服乏冀,售貨員找了媽媽10元錢蝶糯,媽媽給了售貨員多少元錢?",
"我家養(yǎng)了38只雞辆沦,過年吃了5只昼捍,過元宵節(jié)吃了3只,還剩多少只肢扯?",
"公共汽車上有35個人妒茬,到站時下了20個,又上來了9個蔚晨,現在車上有多少個人乍钻?",
"田里種著56棵白菜,種的蓮花白比白菜多13棵铭腕,蓮花白種了多少棵银择?",
"水果店上午賣出桔子36箱,下午賣出27,一天共賣出多少箱?",
"藍藍、玲玲谨履、小胖每人做了15朵紅花欢摄,他們一共做了幾朵紅花?",
" 小亞帶30去玩笋粟,大風車10元怀挠,小火車8元析蝴,他還剩多少錢?",
"學校送給一(1)班48只氣球绿淋,還剩52只闷畸,原來學校有幾只氣球?",
" 蘋果26個吞滞,梨18個佑菩,桔子50個,蘋果裁赠、梨和桔子一共有幾個殿漠?",
"小亞要做60道口算題,還剩18題沒有完成佩捞,小亞已經做完幾題绞幌?",
"爸爸買了2根和路雪8元,買了3根伊利雪糕6元一忱,他付給營業(yè)員20元莲蜘,找回多少元?",
"圖書室有漫畫60本帘营,借出25本票渠,還剩多少本?",
" 小巧做了27道口算芬迄,還剩18道沒有做问顷。小巧一共要做多少道口算?",
" 停車場上有35輛車薯鼠,開走8輛择诈,又開走7輛,一共開走幾輛出皇?",
"小丁丁有100元,他買了一個32元的籃球和一雙40元的溜冰鞋,他還剩多少錢?",
" 書店有100本書,上午賣出45本書哗戈,下午賣出27本郊艘,一天共賣出多少本?",
" 車上有乘客56人唯咬,到站后有18人上車∩醋ⅲ現在有乘客多少人?",
"車上原有64人胆胰,有25人下車狞贱。 車上還有乘客多少人?",
"紅鉛筆有50支蜀涨,藍鉛筆比紅鉛筆少8支瞎嬉,藍鉛筆有多少支蝎毡?",
"轎車有23輛,卡車有37輛氧枣,大客車有18輛沐兵,一共有多少輛車?",
"水果店上午賣出75箱蘋果便监,下午賣出57箱扎谎,一天一共賣出多少箱蘋果?",
" 樹上原來有39只鳥烧董,又飛來8只毁靶,現在有幾只?",
"停車場開走58輛汽車逊移,還剩16輛老充,原來有多少輛?",
" 一共有100只氣球螟左,其中紅氣球有15只啡浊,藍氣球有51只,黃氣球有多少只胶背?",
"停車場上有35輛車巷嚣,開走8輛,又開走7輛钳吟,一共開走幾輛廷粒?",
"紅黃白100只氣球,其中紅氣球20只红且,黃氣球50只坝茎,白氣球有幾只?",
"小朋友做紙花暇番,小亞和小巧各做了20朵嗤放,小丁丁做了15朵,他們一共做了幾朵紙花壁酬?",
"河里有8只鴨子次酌,游來了14只,河里現在有多少只鴨子舆乔?",
" 商店里有65臺電視機,賣掉一些后岳服,還剩35臺電視機。賣掉多少臺希俩?",
"小朋友跳繩吊宋,小亞與小巧各跳了20個,小丁丁跳了25個颜武,他們三人共跳多少個璃搜?",
"一本書 18元拖吼,一支筆3元,一個書包68元腺劣,小胖買一本書和兩支筆用去多少元绿贞?",
"星期天小胖和媽媽去超市買了一個30元的小足球和一副28元的羽毛球拍,媽媽帶了3張20元橘原,夠不夠籍铁?",
"小巧想把草莓分給三個好朋友,小丁丁和小胖各分到6個趾断,小亞得到4個拒名,正好分完。小巧原來有幾個草莓芋酌?",
"小丁丁有42本課外書增显,先借給小亞6本,又向小胖借了9本脐帝,小丁丁現在有幾本書同云?",
" 汽車上原有35人,到站后先下車12人堵腹,又上車8人炸站,現在車上有幾人?",
"學校交書報費疚顷,《少年時報》22元旱易,《卡通王》38元,小丁丁帶50元夠嗎腿堤?",
"小丁丁幫媽媽做家務阀坏,洗碗5分鐘,燒水10分鐘笆檀,擦桌椅5分鐘忌堂,小丁丁做這些事最少用幾分鐘?",
"語文書12本,借走3本就與數學書一樣多,數學書幾本?",
"停車場有汽車60輛,第一次開走15輛,第二次開來14輛,停車場現在有幾輛車?",
"小明有45本故事書,借給小丁丁17本.借給小亞14本,還剩幾本?",
"小明付了50元買了一本書误债,營業(yè)員阿姨找回他35元浸船,這本書要幾元?",
"苗苗第一個月的零花錢是35元寝蹈,第2個月是20元,第3個月是43元登淘,苗苗三個月的零花錢一共是多少元箫老?",
"原有29個球,借出8個黔州,還剩多少個耍鬓?",
"借出8個球阔籽,還剩21個,原有多少個牲蜀?",
"買來12個蘋果笆制,吃了4個,還剩多少個涣达?",
"吃了4個蘋果在辆,還剩8個,原來有多少個度苔?",
"車場里開走了4輛車匆篓,還剩15輛。車場里原有多少輛車寇窑?",
"草地上的兔子跑了8只后鸦概,還剩下40只,原來有兔子多少只甩骏?",
"商店賣出汽水32箱窗市,還剩20箱,原有汽水多少箱饮笛?",
"水果店賣出蘋果76筐咨察,還剩3筐,原有蘋果多少筐缎浇?",
"小山剪了一些★扎拣,貼了31個,還剩下7個素跺。小山剪了幾個★二蓝?",
"小華看書看了92頁,還剩下4頁沒有看指厌。這本書有多少頁刊愚?",
"英語小組原來有12個人,今天上課缺席的有2個人踩验,今天上課的有多少人鸥诽?",
"學校里有8個足球,49個小皮球箕憾,小皮球比足球多多少個牡借?",
"商店里有26個小汽球,5個大汽球袭异,大汽球比小汽球少多少個钠龙?",
"合唱隊有38個女同學,6個男同學,男同學比女同學少多少個碴里?",
"小明養(yǎng)了36只兔沈矿,小紅養(yǎng)了24只兔,小明比小紅多養(yǎng)了多少只咬腋?",
"商店里有35盒紅汽球羹膳,20盒黃汽球,黃汽球比紅汽球少多少盒根竿?",
"梨子有5個陵像,蘋果有7個,蘋果比梨子多多少個犀填?",
"草地上有白兔7只蠢壹,黑兔4只,白兔比黑兔多多少只九巡?",
"小花8歲图贸,爸爸38歲,爸爸比小花大幾歲冕广?",
"美術組有13人疏日,數學組有9人,美術組比數學組多多少人撒汉?",
"草地有公雞7只沟优,母雞39只,母雞比公雞多多少只睬辐?公雞比母雞少多少只裆甩?",
"食堂運回大米28袋饱普,面粉7袋文黎,面粉比大米少多少袋背镇?",
"體操隊有18人,游泳隊比體操隊多11人丰刊,游泳隊有多少人隘谣?",
"水果店賣出26筐蘋果后,剩下的比賣出的多9筐啄巧。剩下多少筐蘋果寻歧?",
"小華有25本故事書,小方比他多11本秩仆。小方有多少本码泛?",
"六月賣出冰箱58臺,七月比六月多賣出22臺澄耍。七月賣出多少臺弟晚?",
"小花今年8歲忘衍,爸爸比她大29歲逾苫。爸爸今年多少歲卿城?",
"有5個草莓,櫻桃比草莓多3個铅搓,櫻桃有幾個瑟押?",
"小花撿了25個貝殼,小明比小花多撿了4個星掰,小明撿了多少個貝殼多望?",
"數學組有9人,美術組比數學組多8人氢烘,美術組有多少人怀偷?",
"食堂運回大米28袋,面粉比大米多7袋播玖,面粉有多少袋椎工?",
"小明養(yǎng)了36只兔,小紅比小明多養(yǎng)了3只蜀踏,小紅養(yǎng)了多少只兔维蒙?",
"商店里有35盒紅汽球,黃汽球比紅汽球多10盒果覆,黃汽球有多少盒颅痊?",
"25比12多多少?",
"比32多20的數是多少局待?",
"一個加數是28斑响,另一個加數比它大10,另一個加數是多少钳榨?",
"一個數比60多30舰罚,這個數是多少?",
"38比8多多少重绷?",
"一個數是26沸停,另一個數是58,和是多少昭卓?",
"29比7多多少愤钾?",
"比49多20的數是多少?",
"一個數比26多8候醒,這個數是多少能颁?",
"第一個加數是58,第二個加數是89倒淫,第一個加數比第二個加數少多少伙菊?",
"被減數是69,減數是39,被減數比減數多多少镜硕?",
"比29多29的數是多少运翼?",
"54與67的差是多少?",
"5與38的和是多少兴枯?",
"比最大的兩位數多1的數是多少血淌?",
"一個加數是35,另一個加數比它多7财剖,另一個加數是多少悠夯?",
"明明寫毛筆字,寫了13個以后躺坟,還有9個要寫沦补,明明一共要寫多少個毛筆字?",
"從花上飛走了26只蝴蝶咪橙,又飛走了5只夕膀,兩次飛走了多少只?",
"飛機場上有16架飛機匣摘,飛走了8架店诗,現在飛機場上還有多少架飛機?",
"小平種7盆紅花音榜,又種了同樣多的黃花庞瘸,兩種花共多少盆?",
"學校原有15瓶膠水赠叼,又買回9瓶擦囊,現在有多少瓶?",
"小強吃了7個蘋果嘴办,剩下15個蘋果瞬场,原來有多少個蘋果?",
"學校有蘭花和菊花共15盆涧郊,蘭花有6盆贯被,菊花幾盆?",
"小麗買衣服用了30元妆艘,售貨員找給她21元彤灶,小麗原來有多少錢?",
"媽媽上衣和褲子共用去79元批旺,買上衣用去50元幌陕,買褲子用去多少元?",
"商店兩次賣出洋娃娃50個汽煮,第一次賣出30個搏熄,第二次賣出幾個棚唆?",
"商店兩次賣出洋娃娃50個,第一次賣出30個心例,兩次賣出多少個宵凌?",
"有60只小雞,28只母雞契邀。還剩多少只摆寄?",
"有60只小雞,28只母雞坯门。母雞比小雞少多少只?",
"有60只小雞逗扒,28只母雞古戴。一共有多少只?",
"學校有蘭花和菊花共16盆矩肩,蘭花有6盆现恼,菊花有幾盆?",
"小青兩次畫了9個 黍檩,第一次畫了5個叉袍,第二次畫了多少個?",
"小紅家有蘋果和梨子共18個刽酱,蘋果有9個喳逛,梨子有多少個?",
"學校要把20箱文具送給山區(qū)小學棵里,已送去10箱润文,還要送幾箱?",
"家有15棵白菜殿怜,吃了5棵典蝌,還有幾棵?",
"一條馬路兩旁各種上9棵樹头谜,一共種樹多少棵骏掀?",
"從車場開走9輛汽車,還剩5輛柱告,車場原來有多少汽車截驮?",
"從車場開走8輛大汽車,又開走同樣多的小汽車末荐,兩次開走多少輛汽車侧纯?",
"學校體育室有8個足球 ,又買來7個甲脏,現在有多少個眶熬?",
"學雷鋒小組上午修了8張椅妹笆,下午修了12張,一天修了多少張椅娜氏?",
"小明和小麗一共拍了35下拳缠,小麗拍了20下,小明拍了多少下贸弥?",
"樹上有20只小鳥窟坐,先飛走了7只,又飛走了6只绵疲,一共飛走了多少只哲鸳?",
"校園里有18盆菊花,運走了16盆盔憨;蘭花比菊花少多少盆徙菠?",
"校園里有18盆菊花,還剩下5盆郁岩,蘭花比菊花少多少盆婿奔?",
"校園里有18盆菊花,蘭花16盆问慎,蘭花比菊花少多少盆萍摊?",
"幼兒園買蘋果50個,分給小朋友12個如叼,還剩多少個冰木?",
"幼兒園買蘋果50個,梨比蘋果少12個薇正,還剩多少個片酝?",
"幼兒園買蘋果50個,梨比蘋果多12個挖腰,還剩多少個雕沿?",
"有白兔和灰兔共30只,有白兔24只猴仑。原來有多少只审轮?",
"有白兔和灰兔共30只,有白兔25只辽俗。有灰兔多少只疾渣?",
"有一些兔,跑了4只崖飘,還有18只榴捡。原來有多少只?",
"小猴拿了21個紅果朱浴,小狗拿了18個紅果吊圾,小猴和小狗誰拿得多达椰?",
"三種郵票一共有92張,熊貓郵票23張项乒,龍郵票38張啰劲。熊貓郵票和龍郵票共有多少張?",
"一共有96個蘋果檀何,上午賣了26個蝇裤,下午賣了39個,還剩幾個频鉴?",
"從前面數栓辜,小明排18,從后面他排15,這一排共有幾人?",
"一個貝殼25元砚殿,一個海螺13元啃憎,用50元去買還剩 多少元?",
"小紅跳了25個繩似炎,小剛跳了36個,一共跳了幾個悯姊?",
"兩只青蛙一共吃了40只害蟲羡藐,一只吃了15只,另一只吃了多少只悯许?",
"男生有32瓶果汁仆嗦,女生有19瓶果汁,男生比女生多幾瓶先壕?",
"小明拔蘿卜瘩扼,已經拔了16個,地里還剩48個垃僚,地里原有幾個集绰?",
"米奇摘了48個桃,小猴比米奇多12個谆棺,小猴摘了幾個栽燕?",
"小明有37個糖果,小紅比小明少19個改淑,小紅有幾個碍岔?",
"一共要折43只紙鶴朵夏,已經好了19只奈籽,還要折幾只?",
"小明跳了25下繩,小剛跳了17下,小剛再跳幾下就和小明同樣多?",
"小明跳了47個繩,小紅再跳18個就和小明一樣多,小紅跳了幾個?",
"車上原有45人,下來19人,又上來23人,現在有多少人?",
"一共有96筐蘋果,上午賣了26筐啤贩,下午賣了39筐志衍,還剩幾筐惹悄?",
"一班有38人,二班有36 人央星,現有60頂帽子每人分一個夠嗎廉沮?",
"打排球的有48人滤灯,比劃船的少19人豫尽,劃船的有幾人贬墩?",
"小兔拔了26個蘿卜绪励,比小豬多7個蠢护,小豬拔了幾個?",
"從前面數介评,小明排18,從后面他排15,這一排共有幾人坪仇?",
"一個貝殼25元皆刺,一個海螺13元,用50元去買還剩 多少元?",
"參加演出的合唱隊有28人弓乙,舞蹈隊的有24人巧婶,參加演出的一共有多少人?",
"爸爸今年36歲,我比爸爸小28歲分衫,今年我?guī)讱q科乎?",
"同學們去拍照走敌,已經照了17張项炼,還有19張沒照,膠卷一共有多少張柑蛇?",
"汽車從起始站出發(fā)芥挣,到第一站有16人下車,24人上車耻台,現在車上有44人空免,有多少人在起始站上車?",
"有一些小松鼠在樹上盆耽,后來跑了6只蹋砚,還剩下5只,原來有幾只小松鼠摄杂?",
"黃花比紅花少5朵坝咐,紅花有12朵,黃花有幾朵析恢?",
"兩個班共種樹20棵墨坚,其中一班種1棵,那么二班種了幾棵樹映挂?",
"小張書包有18本書泽篮,我有3本,我比小張少幾本柑船?",
"今天帽撑,小張書包有10本書,我有11本鞍时,我比小張多幾本亏拉?",
"公共汽車上下來4人扣蜻,車上還坐著7人,原來車上有多少人及塘?",
"今天莽使,小張書包有1本書,我有19本磷蛹,我比小張多幾本吮旅?",
"停車場上原來有19輛汽車,第一次開走3輛味咳,第二次開走7輛庇勃。還剩多少輛?",
"飛機場原有18架飛機槽驶,飛走13架责嚷,還剩幾架?",
"公共汽車上下來1人掂铐,車上還坐著17人罕拂,原來車上有多少人?",
"魚缸里有11條紅金魚和花金魚全陨,其中紅金魚有5條爆班,花金魚有多少條?",
"公共汽車上下來8人辱姨,車上還坐著7人柿菩,原來車上有多少人?",
"停車場上第一次開走7輛雨涛,第二次開走8輛枢舶。一共開走多少輛?",
"學校舞蹈小組有女生9人替久,男生10人凉泄,舞蹈小組一共有學生多少人?",
"籃里有蘋果和梨一共15只蚯根,其中蘋果有13只后众,梨有幾只?",
"白兔和黑兔一共有9只颅拦,其中白兔有3只吼具,黑兔有幾只?",
"8個同學回家了矩距,班里還剩12個同學,請問原來有幾個同學怖竭?",
"媽媽買了一籃梨锥债,小明吃了10個,還剩余3個,媽媽買了多少個梨哮肚?",
"小張書包有5本書登夫,我有12本,小張比我少幾本允趟?",
"魚缸里有19條紅金魚和花金魚恼策,其中紅金魚有9條腹鹉,花金魚有多少條牍鞠?",
"借了4本書捉邢,今天還了2本强法,還剩幾本書溅呢?",
"小飛有12張畫片价脾,送給小明一些悔雹,還剩下9張补疑。送給小明多少張弧蝇?",
"兩個班共種樹13棵碳褒,其中一班種12棵,那么二班種了幾棵樹看疗?",
"生產隊有小牛7頭沙峻,大牛比小牛多8頭,大牛有多少頭两芳?",
"黃花比紅花多7朵摔寨,紅花有11朵,黃花有幾朵盗扇?",
"學校舞蹈小組有女生9人祷肯,男生2人,女生比男生多幾人疗隶?",
"魚缸里有17條紅金魚和花金魚佑笋,其中紅金魚有15條,花金魚有多少條斑鼻?",
"籃里有蘋果和梨一共18只蒋纬,其中蘋果有5只,梨有幾只坚弱?",
"6個同學回家了蜀备,班里還剩11個同學,請問原來有幾個同學荒叶?",
"黃花比紅花少5朵碾阁,紅花有12朵,黃花有幾朵些楣?");
/**
* 隨機生成10以內的加減法
*
* @param normalSumType 算術題類型
* @return
*/
public static String randomNormalSumTopic(NormalSumType normalSumType) {
if (normalSumType == NormalSumType.Addition) {
//加法
int firstNum = RandomUtil.randomInt(1, 10);
int secondNum = RandomUtil.randomInt(1, 11 - firstNum);
return firstNum + "+" + secondNum + "=";
} else {
//減法
int firstNum = RandomUtil.randomInt(1, 10);
int secondNum = RandomUtil.randomInt(1, firstNum + 1);
return firstNum + "-" + secondNum + "=";
}
}
/**
* 隨機20條10以內的加減算術題
*
* @return
*/
public static List<String> randomNormalSumTopicList() {
List<String> result = new ArrayList<>();
//隨機10條加法
while (result.size() < 10) {
String item = randomNormalSumTopic(NormalSumType.Addition);
if (!result.contains(item)) {
result.add(item);
}
}
//隨機10條減法
while (result.size() < 20) {
String item = randomNormalSumTopic(NormalSumType.Subtraction);
if (!result.contains(item)) {
result.add(item);
}
}
return result;
}
/**
* 隨機生成100以內的相鄰數
*
* @return
*/
public static String randomNearNumTopic() {
int num = RandomUtil.randomInt(2, 100);
return "( )" + num + "( )";
}
/**
* 隨機6條100以內的相鄰數題
*
* @return
*/
public static List<String> randomNearNumTopicList() {
List<String> result = new ArrayList<>();
//隨機6條相鄰數
while (result.size() < 6) {
String item = randomNearNumTopic();
if (!result.contains(item)) {
result.add(item);
}
}
return result;
}
/**
* 隨機生成100以內的比較
*
* @return
*/
public static String randomCompareTopic() {
int firstNum = RandomUtil.randomInt(1, 100);
int secondNum = RandomUtil.randomInt(1, 100);
return firstNum + " ? " + secondNum;
}
/**
* 隨機8條100以內的比大小題
*
* @return
*/
public static List<String> randomCompareTopicList() {
List<String> result = new ArrayList<>();
//隨機8條比較大小題
while (result.size() < 8) {
String item = randomCompareTopic();
if (!result.contains(item)) {
result.add(item);
}
}
return result;
}
/**
* 隨機生成10以內的分解題
*
* @return
*/
public static String randomDivideTopic() {
int sum = RandomUtil.randomInt(2, 11);
int firstNum = RandomUtil.randomInt(1, sum);
if (RandomUtil.randomBoolean()) {
return sum + "_" + firstNum + " ( )";
} else {
return sum + "_" + "( ) " + firstNum;
}
}
/**
* 隨機生成10以內的組合題
*
* @return
*/
public static String randomCombinationTopic() {
int firstNum = RandomUtil.randomInt(1, 10);
int secondNum = RandomUtil.randomInt(1, 11 - firstNum);
return firstNum + " " + secondNum + "_" + "( )";
}
/**
* 隨機8條100以內的分解組合題
*
* @return
*/
public static List<String> randomDivideCombinationTopicList() {
List<String> result = new ArrayList<>();
//隨機4條分解題
while (result.size() < 4) {
String item = randomDivideTopic();
if (!result.contains(item)) {
result.add(item);
}
}
//隨機4條組合題
while (result.size() < 8) {
String item = randomCombinationTopic();
if (!result.contains(item)) {
result.add(item);
}
}
return result;
}
/**
* 隨機生成10以內的看圖計算題
*
* @return
*/
public static String randomPhotoComputeTopic(NormalSumType normalSumType) {
String photo = Photos.get(RandomUtil.randomInt(0, Photos.size()));
if (normalSumType == NormalSumType.Addition) {
//加法
int firstNum = RandomUtil.randomInt(1, 10);
int secondNum = RandomUtil.randomInt(1, 11 - firstNum);
return getPhotoStr(photo, firstNum) + " + " + getPhotoStr(photo, secondNum);
} else {
//減法
int firstNum = RandomUtil.randomInt(1, 10);
int secondNum = RandomUtil.randomInt(1, firstNum + 1);
return getPhotoStr(photo, firstNum) + " - " + getPhotoStr(photo, secondNum);
}
}
/**
* 隨機4條100以內的看圖計算題
*
* @return
*/
public static List<String> randomPhotoComputeTopicList() {
List<String> result = new ArrayList<>();
//隨機2條加法題
while (result.size() < 2) {
String item = randomPhotoComputeTopic(NormalSumType.Addition);
if (!result.contains(item)) {
result.add(item);
}
}
//隨機2條減法題
while (result.size() < 4) {
String item = randomPhotoComputeTopic(NormalSumType.Subtraction);
if (!result.contains(item)) {
result.add(item);
}
}
return result;
}
/**
* 隨機生成10以內數相加(湊10法)
*
* @return
*/
public static String randomSecondSumTopic() {
int firstNum = RandomUtil.randomInt(2, 10);
int secondNum = RandomUtil.randomInt(11 - firstNum, 10);
return firstNum + "+" + secondNum + "=";
}
/**
* 隨機3條10以內數相加
*
* @return
*/
public static List<String> randomSecondSumTopicList() {
List<String> result = new ArrayList<>();
while (result.size() < 3) {
String item = randomSecondSumTopic();
if (!result.contains(item)) {
result.add(item);
}
}
return result;
}
/**
* 隨機生成10以內的加減法連線
*
* @param normalSumType 算術題類型
* @return
*/
public static String randomLinkTopic(NormalSumType normalSumType) {
if (normalSumType == NormalSumType.Addition) {
//加法
int firstNum = RandomUtil.randomInt(1, 10);
int secondNum = RandomUtil.randomInt(1, 11 - firstNum);
return firstNum + "+" + secondNum + "=" + (firstNum + secondNum);
} else {
//減法
int firstNum = RandomUtil.randomInt(1, 10);
int secondNum = RandomUtil.randomInt(1, firstNum + 1);
return firstNum + "-" + secondNum + "=" + (firstNum - secondNum);
}
}
/**
* 隨機5條10以內的加減算術題
*
* @return
*/
public static List<String> randomLinkTopicList() {
List<String> result = new ArrayList<>();
while (result.size() < 5) {
String item;
if (RandomUtil.randomBoolean()) {
item = randomLinkTopic(NormalSumType.Addition);
} else {
item = randomLinkTopic(NormalSumType.Subtraction);
}
if (!result.contains(item)) {
result.add(item);
}
}
return result;
}
/**
* 隨機生成1x以內數相減(借十法)
*
* @return
*/
public static String randomThirdSubTopic() {
int firstNum = RandomUtil.randomInt(11, 20);
int secondNum = RandomUtil.randomInt(firstNum - 10, 10);
return firstNum + "-" + secondNum + "=";
}
/**
* 隨機3條1x以內數相減(借十法)
*
* @return
*/
public static List<String> randomThirdSubTopicList() {
List<String> result = new ArrayList<>();
while (result.size() < 3) {
String item = randomThirdSubTopic();
if (!result.contains(item)) {
result.add(item);
}
}
return result;
}
/**
* 隨機生成數一數題
*
* @return
*/
public static String randomComputeCountTopic() {
//四種圖片
List<String> photoList = new ArrayList<>();
while (photoList.size() < 4) {
String photo = Photos.get(RandomUtil.randomInt(0, Photos.size()));
if (!photoList.contains(photo)) {
photoList.add(photo);
}
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < photoList.size(); i++) {
String photo = photoList.get(i);
int count = RandomUtil.randomInt(0, 7);
for (int j = 0; j < count; j++) {
sb.append(photo);
}
}
return sb + "_" + photoList.get(RandomUtil.randomInt(0, 4));
}
/**
* 隨機4條隨機生成數一數題
*
* @return
*/
public static List<String> randomComputeCountTopicList() {
List<String> result = new ArrayList<>();
while (result.size() < 4) {
String item = randomComputeCountTopic();
if (!result.contains(item)) {
result.add(item);
}
}
return result;
}
/**
* 隨機生成應用題
*
* @return
*/
public static String randomApplicationTopic() {
return ApplicationTopicList.get(RandomUtil.randomInt(0, ApplicationTopicList.size()));
}
/**
* 隨機3條隨機生成應用題題
*
* @return
*/
public static List<String> randomApplicationTopicList() {
List<String> result = new ArrayList<>();
while (result.size() < 3) {
String item = randomApplicationTopic();
if (!result.contains(item)) {
result.add(item);
}
}
return result;
}
/**
* 根據數量獲取圖片字符串
*
* @param photo
* @param count
* @return
*/
private static String getPhotoStr(String photo, int count) {
List<String> list = new ArrayList<>();
for (int i = 0; i < count; i++) {
list.add(photo);
}
return String.join("", list);
}
}
生成方法
/**
* 根據一段時間獲取該段時間的所有月份
*
* @param minDate yyyy_MM_dd
* @param maxDate yyyy_MM_dd
* @return
*/
public static List<String> getDayBetween(String minDate, String maxDate) {
ArrayList<String> result = new ArrayList<String>();
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy_MM_dd");
Calendar min = Calendar.getInstance();
Calendar max = Calendar.getInstance();
min.setTime(sdf.parse(minDate));
min.set(min.get(Calendar.YEAR), min.get(Calendar.MONTH), min.get(Calendar.DAY_OF_MONTH));
max.setTime(sdf.parse(maxDate));
max.set(max.get(Calendar.YEAR), max.get(Calendar.MONTH), max.get(Calendar.DAY_OF_MONTH));
Calendar curr = min;
while (curr.before(max)) {
result.add(sdf.format(curr.getTime()));
curr.add(Calendar.DAY_OF_MONTH, 1);
}
} catch (ParseException e) {
e.printStackTrace();
}
return result;
}
private static void generate(String path) throws Exception {
FileOutputStream out = new FileOutputStream(new File(path));
XWPFDocument document = new XWPFDocument();
//頭部信息
createHeader(document);
createEmptyParagraph(document);
//第一大題 - 10以內的算術題
createNormalSumTopic(document);
createEmptyParagraph(document);
//第二大題 - 100以內的相鄰數題
createNearNumTopic(document);
createEmptyParagraph(document);
//第三大題 - 100以內的比較大小題
createCompareTopic(document);
createEmptyParagraph(document);
//第四大題 - 10以內的分解組合題
createDivideCombinationTopic(document);
createEmptyParagraph(document);
//第五大題 - 10以內的圖片計算題
createPhotoComputeTopic(document);
createEmptyParagraph(document);
createEmptyParagraph(document);
//第六大題 - 10以內的加法題(湊十法)
createSecondSumTopic(document);
createEmptyParagraph(document);
//第七大題 - 1x以內的減法題(借十法)
createThirdSubTopic(document);
createEmptyParagraph(document);
//第八大題 - 10以內的加減法連線題
createLinkTopic(document);
createEmptyParagraph(document);
//第九大題 - 數一數題
createComputeCountTopic(document);
createEmptyParagraph(document);
//第十大題 - 應用題
createApplicationTopic(document);
createEmptyParagraph(document);
document.write(out);
out.close();
}
/**
* 換行
*
* @param document
*/
private static void createEmptyParagraph(XWPFDocument document) {
//換行
XWPFParagraph spaceParagraph = document.createParagraph();
XWPFRun spaceParagraphRun = spaceParagraph.createRun();
spaceParagraphRun.setText("\r");
}
/**
* 創(chuàng)建頭部信息
*
* @param document
*/
private static void createHeader(XWPFDocument document) {
//標題
XWPFParagraph titleParagraph = document.createParagraph();
titleParagraph.setAlignment(ParagraphAlignment.CENTER);
XWPFRun titleParagraphRun = titleParagraph.createRun();
titleParagraphRun.setText("暑假幼小銜接數學測試卷");
titleParagraphRun.setColor("000000");
titleParagraphRun.setFontSize(23);
titleParagraphRun.setFontFamily("宋體");
//分數
XWPFParagraph scoreParagraph = document.createParagraph();
scoreParagraph.setAlignment(ParagraphAlignment.CENTER);
XWPFRun scoreParagraphRun = scoreParagraph.createRun();
scoreParagraphRun.setText("(100分)");
scoreParagraphRun.setColor("000000");
scoreParagraphRun.setFontSize(17);
scoreParagraphRun.setFontFamily("楷體");
}
/**
* 創(chuàng)建第一大題 - 10以內的算術題
*
* @param document
*/
private static void createNormalSumTopic(XWPFDocument document) {
//20條10以內的算術題
List<String> topicList = randomNormalSumTopicList();
XWPFParagraph firstParagraph = document.createParagraph();
firstParagraph.setAlignment(ParagraphAlignment.LEFT);
XWPFRun firstParagraphRun = firstParagraph.createRun();
firstParagraphRun.setText("一脂凶、看誰算得又對又快(10分)");
firstParagraphRun.setColor("000000");
firstParagraphRun.setFontSize(17);
firstParagraphRun.setFontFamily("楷體");
createEmptyParagraph(document);
//基本信息表格
XWPFTable table = document.createTable(4, 5);
table.setTableAlignment(TableRowAlign.CENTER);
//去表格邊框
table.getCTTbl().getTblPr().unsetTblBorders();
//列寬自動分割
CTTblWidth infoTableWidth = table.getCTTbl().addNewTblPr().addNewTblW();
infoTableWidth.setType(STTblWidth.DXA);
infoTableWidth.setW(BigInteger.valueOf(9072));
int totalRow = 4;
int totalCol = 5;
for (int rowNum = 0; rowNum < totalRow; rowNum++) {
for (int colNum = 0; colNum < totalCol; colNum++) {
int index = rowNum * totalCol + colNum;
String item = topicList.get(index);
XWPFTableRow row = table.getRow(rowNum);
row.setHeight(800);
XWPFTableCell cell = row.getCell(colNum);
cell.setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER); //垂直居中
XWPFParagraph paragraph = cell.getParagraphs().get(0);
paragraph.setAlignment(ParagraphAlignment.LEFT);
paragraph.setVerticalAlignment(TextAlignment.CENTER);
XWPFRun paragraphRun = paragraph.createRun();
paragraphRun.setText(item);
paragraphRun.setColor("000000");
paragraphRun.setFontSize(17);
paragraphRun.setFontFamily("楷體");
}
}
}
/**
* 創(chuàng)建第二大題 - 100以內的相鄰數題
*
* @param document
*/
private static void createNearNumTopic(XWPFDocument document) {
//6條100以內的相鄰數題
List<String> topicList = randomNearNumTopicList();
XWPFParagraph firstParagraph = document.createParagraph();
firstParagraph.setAlignment(ParagraphAlignment.LEFT);
XWPFRun firstParagraphRun = firstParagraph.createRun();
firstParagraphRun.setText("二宪睹、填相鄰數(6分)");
firstParagraphRun.setColor("000000");
firstParagraphRun.setFontSize(17);
firstParagraphRun.setFontFamily("楷體");
createEmptyParagraph(document);
//基本信息表格
XWPFTable table = document.createTable(2, 3);
table.setTableAlignment(TableRowAlign.CENTER);
//去表格邊框
table.getCTTbl().getTblPr().unsetTblBorders();
//列寬自動分割
CTTblWidth infoTableWidth = table.getCTTbl().addNewTblPr().addNewTblW();
infoTableWidth.setType(STTblWidth.DXA);
infoTableWidth.setW(BigInteger.valueOf(9072));
int totalRow = 2;
int totalCol = 3;
for (int rowNum = 0; rowNum < totalRow; rowNum++) {
for (int colNum = 0; colNum < totalCol; colNum++) {
int index = rowNum * totalCol + colNum;
String item = topicList.get(index);
XWPFTableRow row = table.getRow(rowNum);
row.setHeight(800);
XWPFTableCell cell = row.getCell(colNum);
cell.setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER); //垂直居中
XWPFParagraph paragraph = cell.getParagraphs().get(0);
paragraph.setAlignment(ParagraphAlignment.LEFT);
paragraph.setVerticalAlignment(TextAlignment.CENTER);
XWPFRun paragraphRun = paragraph.createRun();
paragraphRun.setText(item);
paragraphRun.setColor("000000");
paragraphRun.setFontSize(17);
paragraphRun.setFontFamily("楷體");
}
}
}
/**
* 創(chuàng)建第三大題 - 100以內的比較大小題
*
* @param document
*/
private static void createCompareTopic(XWPFDocument document) {
//6條100以內的相鄰數題
List<String> topicList = randomCompareTopicList();
XWPFParagraph firstParagraph = document.createParagraph();
firstParagraph.setAlignment(ParagraphAlignment.LEFT);
XWPFRun firstParagraphRun = firstParagraph.createRun();
firstParagraphRun.setText("三、在?里填上“<”“>”或“=(8分)");
firstParagraphRun.setColor("000000");
firstParagraphRun.setFontSize(17);
firstParagraphRun.setFontFamily("楷體");
createEmptyParagraph(document);
//基本信息表格
XWPFTable table = document.createTable(2, 4);
table.setTableAlignment(TableRowAlign.CENTER);
//去表格邊框
table.getCTTbl().getTblPr().unsetTblBorders();
//列寬自動分割
CTTblWidth infoTableWidth = table.getCTTbl().addNewTblPr().addNewTblW();
infoTableWidth.setType(STTblWidth.DXA);
infoTableWidth.setW(BigInteger.valueOf(9072));
int totalRow = 2;
int totalCol = 4;
for (int rowNum = 0; rowNum < totalRow; rowNum++) {
for (int colNum = 0; colNum < totalCol; colNum++) {
int index = rowNum * totalCol + colNum;
String item = topicList.get(index);
XWPFTableRow row = table.getRow(rowNum);
row.setHeight(800);
XWPFTableCell cell = row.getCell(colNum);
cell.setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER); //垂直居中
XWPFParagraph paragraph = cell.getParagraphs().get(0);
paragraph.setAlignment(ParagraphAlignment.LEFT);
paragraph.setVerticalAlignment(TextAlignment.CENTER);
XWPFRun paragraphRun = paragraph.createRun();
paragraphRun.setText(item);
paragraphRun.setColor("000000");
paragraphRun.setFontSize(17);
paragraphRun.setFontFamily("楷體");
}
}
}
/**
* 創(chuàng)建第四大題 - 10以內的分解組合題
*
* @param document
*/
private static void createDivideCombinationTopic(XWPFDocument document) {
//8條10以內的分解組合題
List<String> topicList = TopicUtil.randomDivideCombinationTopicList();
XWPFParagraph firstParagraph = document.createParagraph();
firstParagraph.setAlignment(ParagraphAlignment.LEFT);
XWPFRun firstParagraphRun = firstParagraph.createRun();
firstParagraphRun.setText("四蚕钦、分解與組合(8分)");
firstParagraphRun.setColor("000000");
firstParagraphRun.setFontSize(17);
firstParagraphRun.setFontFamily("楷體");
createEmptyParagraph(document);
//基本信息表格
XWPFTable divideTable = document.createTable(3, 4);
divideTable.setTableAlignment(TableRowAlign.CENTER);
//去表格邊框
divideTable.getCTTbl().getTblPr().unsetTblBorders();
//列寬自動分割
CTTblWidth divideTableWidth = divideTable.getCTTbl().addNewTblPr().addNewTblW();
divideTableWidth.setType(STTblWidth.DXA);
divideTableWidth.setW(BigInteger.valueOf(9072));
int totalRow = 3;
int totalCol = 4;
for (int rowNum = 0; rowNum < totalRow; rowNum++) {
for (int colNum = 0; colNum < totalCol; colNum++) {
int index = colNum;
String item = topicList.get(index);
String[] itemArr = item.split("_");
XWPFTableRow row = divideTable.getRow(rowNum);
row.setHeight(800);
XWPFTableCell cell = row.getCell(colNum);
cell.setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER); //垂直居中
XWPFParagraph paragraph = cell.getParagraphs().get(0);
paragraph.setAlignment(ParagraphAlignment.CENTER);
paragraph.setVerticalAlignment(TextAlignment.CENTER);
XWPFRun paragraphRun = paragraph.createRun();
if (rowNum % 3 == 0) {
paragraphRun.setText(itemArr[0]);
paragraphRun.setFontSize(17);
} else if (rowNum % 3 == 1) {
paragraphRun.setText("∧");
paragraphRun.setFontSize(43);
} else {
paragraphRun.setText(itemArr[1]);
paragraphRun.setFontSize(17);
}
paragraphRun.setColor("000000");
paragraphRun.setFontFamily("楷體");
}
}
createEmptyParagraph(document);
XWPFTable combinationTable = document.createTable(3, 4);
combinationTable.setTableAlignment(TableRowAlign.CENTER);
//去表格邊框
combinationTable.getCTTbl().getTblPr().unsetTblBorders();
//列寬自動分割
CTTblWidth combinationTableWidth = combinationTable.getCTTbl().addNewTblPr().addNewTblW();
combinationTableWidth.setType(STTblWidth.DXA);
combinationTableWidth.setW(BigInteger.valueOf(9072));
for (int rowNum = 0; rowNum < totalRow; rowNum++) {
for (int colNum = 0; colNum < totalCol; colNum++) {
int index = 4 + colNum;
String item = topicList.get(index);
String[] itemArr = item.split("_");
XWPFTableRow row = combinationTable.getRow(rowNum);
row.setHeight(800);
XWPFTableCell cell = row.getCell(colNum);
cell.setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER); //垂直居中
XWPFParagraph paragraph = cell.getParagraphs().get(0);
paragraph.setAlignment(ParagraphAlignment.CENTER);
paragraph.setVerticalAlignment(TextAlignment.CENTER);
XWPFRun paragraphRun = paragraph.createRun();
if (rowNum % 3 == 0) {
paragraphRun.setText(itemArr[0]);
paragraphRun.setFontSize(17);
} else if (rowNum % 3 == 1) {
paragraphRun.setText("∨");
paragraphRun.setFontSize(43);
} else {
paragraphRun.setText(itemArr[1]);
paragraphRun.setFontSize(17);
}
paragraphRun.setColor("000000");
paragraphRun.setFontFamily("楷體");
}
}
}
/**
* 創(chuàng)建第五大題 - 10以內的圖片計算題
*
* @param document
*/
private static void createPhotoComputeTopic(XWPFDocument document) {
//4條10以內的圖片計算題
List<String> topicList = randomPhotoComputeTopicList();
XWPFParagraph firstParagraph = document.createParagraph();
firstParagraph.setAlignment(ParagraphAlignment.LEFT);
XWPFRun firstParagraphRun = firstParagraph.createRun();
firstParagraphRun.setText("五亭病、看圖列算式并計算(8分)");
firstParagraphRun.setColor("000000");
firstParagraphRun.setFontSize(17);
firstParagraphRun.setFontFamily("楷體");
createEmptyParagraph(document);
//基本信息表格
XWPFTable table = document.createTable(4, 2);
table.setTableAlignment(TableRowAlign.CENTER);
//去表格邊框
table.getCTTbl().getTblPr().unsetTblBorders();
//列寬自動分割
CTTblWidth infoTableWidth = table.getCTTbl().addNewTblPr().addNewTblW();
infoTableWidth.setType(STTblWidth.DXA);
infoTableWidth.setW(BigInteger.valueOf(9072));
int totalRow = 4;
int totalCol = 2;
for (int rowNum = 0; rowNum < totalRow; rowNum++) {
for (int colNum = 0; colNum < totalCol; colNum++) {
int index = rowNum;
String item = topicList.get(index);
XWPFTableRow row = table.getRow(rowNum);
row.setHeight(800);
XWPFTableCell cell = row.getCell(colNum);
cell.setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER); //垂直居中
XWPFParagraph paragraph = cell.getParagraphs().get(0);
paragraph.setAlignment(ParagraphAlignment.LEFT);
paragraph.setVerticalAlignment(TextAlignment.CENTER);
XWPFRun paragraphRun = paragraph.createRun();
if (colNum % 2 == 1) {
paragraphRun.setText("□ ? □ = □");
} else {
paragraphRun.setText(item);
}
paragraphRun.setFontSize(17);
paragraphRun.setColor("000000");
paragraphRun.setFontFamily("楷體");
}
}
}
/**
* 創(chuàng)建第六大題 - 10以內的加法題(湊十法)
*
* @param document
*/
private static void createSecondSumTopic(XWPFDocument document) {
//3條10以內的加法題(湊十法)
List<String> topicList = randomSecondSumTopicList();
XWPFParagraph firstParagraph = document.createParagraph();
firstParagraph.setAlignment(ParagraphAlignment.LEFT);
XWPFRun firstParagraphRun = firstParagraph.createRun();
firstParagraphRun.setText("六、算一算嘶居,湊十法(9分)");
firstParagraphRun.setColor("000000");
firstParagraphRun.setFontSize(17);
firstParagraphRun.setFontFamily("楷體");
createEmptyParagraph(document);
//基本信息表格
XWPFTable table = document.createTable(3, 3);
table.setTableAlignment(TableRowAlign.CENTER);
//去表格邊框
table.getCTTbl().getTblPr().unsetTblBorders();
//列寬自動分割
CTTblWidth infoTableWidth = table.getCTTbl().addNewTblPr().addNewTblW();
infoTableWidth.setType(STTblWidth.DXA);
infoTableWidth.setW(BigInteger.valueOf(9072));
int totalRow = 3;
int totalCol = 3;
for (int rowNum = 0; rowNum < totalRow; rowNum++) {
for (int colNum = 0; colNum < totalCol; colNum++) {
String item = topicList.get(colNum);
XWPFTableRow row = table.getRow(rowNum);
row.setHeight(800);
XWPFTableCell cell = row.getCell(colNum);
cell.setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER); //垂直居中
XWPFParagraph paragraph = cell.getParagraphs().get(0);
paragraph.setAlignment(ParagraphAlignment.CENTER);
paragraph.setVerticalAlignment(TextAlignment.CENTER);
XWPFRun paragraphRun = paragraph.createRun();
if (rowNum == 0) {
paragraphRun.setText(item);
} else {
paragraphRun.setText("");
}
paragraphRun.setFontSize(17);
paragraphRun.setColor("000000");
paragraphRun.setFontFamily("楷體");
}
}
}
/**
* 創(chuàng)建第七大題 - 1x以內的減法題(借十法)
*
* @param document
*/
private static void createThirdSubTopic(XWPFDocument document) {
//3條10以內的加法題(湊十法)
List<String> topicList = randomThirdSubTopicList();
XWPFParagraph firstParagraph = document.createParagraph();
firstParagraph.setAlignment(ParagraphAlignment.LEFT);
XWPFRun firstParagraphRun = firstParagraph.createRun();
firstParagraphRun.setText("七罪帖、算一算,借十法(9分)");
firstParagraphRun.setColor("000000");
firstParagraphRun.setFontSize(17);
firstParagraphRun.setFontFamily("楷體");
createEmptyParagraph(document);
//基本信息表格
XWPFTable table = document.createTable(3, 3);
table.setTableAlignment(TableRowAlign.CENTER);
//去表格邊框
table.getCTTbl().getTblPr().unsetTblBorders();
//列寬自動分割
CTTblWidth infoTableWidth = table.getCTTbl().addNewTblPr().addNewTblW();
infoTableWidth.setType(STTblWidth.DXA);
infoTableWidth.setW(BigInteger.valueOf(9072));
int totalRow = 3;
int totalCol = 3;
for (int rowNum = 0; rowNum < totalRow; rowNum++) {
for (int colNum = 0; colNum < totalCol; colNum++) {
int index = rowNum;
String item = topicList.get(colNum);
XWPFTableRow row = table.getRow(rowNum);
row.setHeight(800);
XWPFTableCell cell = row.getCell(colNum);
cell.setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER); //垂直居中
XWPFParagraph paragraph = cell.getParagraphs().get(0);
paragraph.setAlignment(ParagraphAlignment.CENTER);
paragraph.setVerticalAlignment(TextAlignment.CENTER);
XWPFRun paragraphRun = paragraph.createRun();
if (rowNum == 0) {
paragraphRun.setText(item);
} else {
paragraphRun.setText("");
}
paragraphRun.setFontSize(17);
paragraphRun.setColor("000000");
paragraphRun.setFontFamily("楷體");
}
}
}
/**
* 創(chuàng)建第八大題 - 10以內的加減法連線題
*
* @param document
*/
private static void createLinkTopic(XWPFDocument document) {
//5條10以內的加減法連線題
List<String> topicList = randomLinkTopicList();
List<String> answerList = new ArrayList<>();
for (int i = 0; i < topicList.size(); i++) {
answerList.add(topicList.get(i).split("=")[1]);
}
Collections.shuffle(answerList);
XWPFParagraph firstParagraph = document.createParagraph();
firstParagraph.setAlignment(ParagraphAlignment.LEFT);
XWPFRun firstParagraphRun = firstParagraph.createRun();
firstParagraphRun.setText("八邮屁、算一算整袁,連一連(5分)");
firstParagraphRun.setColor("000000");
firstParagraphRun.setFontSize(17);
firstParagraphRun.setFontFamily("楷體");
createEmptyParagraph(document);
//基本信息表格
XWPFTable table = document.createTable(5, 2);
table.setTableAlignment(TableRowAlign.CENTER);
//去表格邊框
table.getCTTbl().getTblPr().unsetTblBorders();
//列寬自動分割
CTTblWidth infoTableWidth = table.getCTTbl().addNewTblPr().addNewTblW();
infoTableWidth.setType(STTblWidth.DXA);
infoTableWidth.setW(BigInteger.valueOf(9072));
int totalRow = 5;
int totalCol = 2;
for (int rowNum = 0; rowNum < totalRow; rowNum++) {
for (int colNum = 0; colNum < totalCol; colNum++) {
int index = rowNum;
String item = topicList.get(index);
XWPFTableRow row = table.getRow(rowNum);
row.setHeight(800);
XWPFTableCell cell = row.getCell(colNum);
cell.setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER); //垂直居中
XWPFParagraph paragraph = cell.getParagraphs().get(0);
paragraph.setAlignment(ParagraphAlignment.CENTER);
paragraph.setVerticalAlignment(TextAlignment.CENTER);
XWPFRun paragraphRun = paragraph.createRun();
if (colNum % 2 == 0) {
paragraphRun.setText(item.split("=")[0]);
} else {
paragraphRun.setText(answerList.get(rowNum));
}
paragraphRun.setFontSize(17);
paragraphRun.setColor("000000");
paragraphRun.setFontFamily("楷體");
}
}
}
/**
* 創(chuàng)建第九大題 - 數一數題
*
* @param document
*/
private static void createComputeCountTopic(XWPFDocument document) {
//4條數一數題
List<String> topicList = randomComputeCountTopicList();
XWPFParagraph firstParagraph = document.createParagraph();
firstParagraph.setAlignment(ParagraphAlignment.LEFT);
XWPFRun firstParagraphRun = firstParagraph.createRun();
firstParagraphRun.setText("九、數一數樱报,填一填(4分)");
firstParagraphRun.setColor("000000");
firstParagraphRun.setFontSize(17);
firstParagraphRun.setFontFamily("楷體");
createEmptyParagraph(document);
//基本信息表格
XWPFTable table = document.createTable(4, 2);
table.setTableAlignment(TableRowAlign.CENTER);
//去表格邊框
table.getCTTbl().getTblPr().unsetTblBorders();
//列寬自動分割
CTTblWidth infoTableWidth = table.getCTTbl().addNewTblPr().addNewTblW();
infoTableWidth.setType(STTblWidth.DXA);
infoTableWidth.setW(BigInteger.valueOf(9072));
int totalRow = 4;
int totalCol = 2;
for (int rowNum = 0; rowNum < totalRow; rowNum++) {
for (int colNum = 0; colNum < totalCol; colNum++) {
int index = rowNum;
String item = topicList.get(index);
XWPFTableRow row = table.getRow(rowNum);
row.setHeight(800);
XWPFTableCell cell = row.getCell(colNum);
cell.setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER); //垂直居中
XWPFParagraph paragraph = cell.getParagraphs().get(0);
paragraph.setAlignment(ParagraphAlignment.CENTER);
paragraph.setVerticalAlignment(TextAlignment.CENTER);
XWPFRun paragraphRun = paragraph.createRun();
if (colNum % 2 == 0) {
paragraphRun.setText(item.split("_")[0]);
} else {
paragraphRun.setText(item.split("_")[1] + "□個");
}
paragraphRun.setFontSize(17);
paragraphRun.setColor("000000");
paragraphRun.setFontFamily("楷體");
}
}
}
/**
* 創(chuàng)建第十大題 - 應用題
*
* @param document
*/
private static void createApplicationTopic(XWPFDocument document) {
//3條應用題
List<String> topicList = randomApplicationTopicList();
XWPFParagraph firstParagraph = document.createParagraph();
firstParagraph.setAlignment(ParagraphAlignment.LEFT);
XWPFRun firstParagraphRun = firstParagraph.createRun();
firstParagraphRun.setText("十葬项、解決問題(15分)");
firstParagraphRun.setColor("000000");
firstParagraphRun.setFontSize(17);
firstParagraphRun.setFontFamily("楷體");
createEmptyParagraph(document);
//基本信息表格
XWPFTable table = document.createTable(6, 1);
table.setTableAlignment(TableRowAlign.CENTER);
//去表格邊框
table.getCTTbl().getTblPr().unsetTblBorders();
//列寬自動分割
CTTblWidth infoTableWidth = table.getCTTbl().addNewTblPr().addNewTblW();
infoTableWidth.setType(STTblWidth.DXA);
infoTableWidth.setW(BigInteger.valueOf(9072));
int totalRow = 6;
int totalCol = 1;
for (int rowNum = 0; rowNum < totalRow; rowNum++) {
for (int colNum = 0; colNum < totalCol; colNum++) {
int index = rowNum / 2;
String item = topicList.get(index);
XWPFTableRow row = table.getRow(rowNum);
row.setHeight(800);
XWPFTableCell cell = row.getCell(colNum);
cell.setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER); //垂直居中
XWPFParagraph paragraph = cell.getParagraphs().get(0);
paragraph.setAlignment(ParagraphAlignment.LEFT);
paragraph.setVerticalAlignment(TextAlignment.CENTER);
XWPFRun paragraphRun = paragraph.createRun();
if (rowNum % 2 == 0) {
paragraphRun.setText(rowNum / 2 + 1 + "." + item);
} else {
paragraphRun.setText("");
}
paragraphRun.setFontSize(17);
paragraphRun.setColor("000000");
paragraphRun.setFontFamily("楷體");
}
}
}
4.使用
// List<String> dayList = getDayBetween("2023_07_01", "2023_09_01");
//
// for (int i = 0; i < dayList.size(); i++) {
// generate("/Users/geenju/Desktop/papers/" + dayList.get(i) + ".docx");
// }
for (int i = 1; i < 1000; i++) {
generate("/Users/geenju/Desktop/papers/幼小銜接測試題_" + i + ".docx");
}