學習軌道
/
Java
Java
/
練習
/
安娜琳的滲透行動
安娜琳的滲透行動

安娜琳的滲透行動

學習練習

簡介

布林值

Java 中的布林值以 boolean 型別表示,其值可以是 true 或 false。

Java 支援三種布林運算子:

  • !(NOT):將布林值反轉
  • &&(AND):接受兩個布林值,若兩者皆為 true,就回傳 true
  • ||(OR):兩個布林值中只要有一個是 true,就回傳 true

範例

!true // => false
!false // => true
true && false // => false
true && true // => true
false || false // => false
false || true // => true

說明

在這個練習中,你會為一款朋友正在開發的新 RPG 遊戲實作任務邏輯。 遊戲的主角是 Annalyn,一位勇敢的女孩,身邊帶著一隻兇猛又忠誠的寵物狗。 不幸的是,災難降臨了:她最好的朋友在森林裡尋找莓果時被綁架了。 Annalyn 會試著找到並救出她的朋友,也可以選擇帶上她的狗一起展開任務。

沿著蹤跡追查一段時間後,Annalyn 發現了關著她朋友的營地。 原來綁匪有兩個人:一位強大的騎士和一位狡猾的弓箭手。

找到綁匪後,Annalyn 思考自己能採取下列哪些行動:

  • 快速攻擊:如果騎士正在睡覺,就可以發動快速攻擊,因為他需要時間穿上盔甲,這段期間他會很脆弱。
  • 刺探:只要至少有一個人醒著,就可以刺探這個團體。 否則,刺探只是浪費時間。
  • 向囚犯打暗號:如果囚犯醒著而且弓箭手正在睡覺,就可以用鳥叫聲向囚犯打暗號。 弓箭手受過鳥叫聲暗號的訓練,如果他們醒著,就可能攔截訊息。
  • 釋放囚犯:Annalyn 可以嘗試潛入營地釋放囚犯。 這很冒險,而且只有兩種方式能成功:
    • 如果 Annalyn 帶著她的寵物狗,只要弓箭手在睡覺,她就能救出囚犯。 騎士怕狗,而弓箭手來不及準備,Annalyn 和囚犯就能逃走。
    • 如果 Annalyn 沒有帶寵物狗,她和囚犯就得非常小心翼翼! 只要囚犯醒著,而且騎士和弓箭手都在睡覺,Annalyn 就能釋放囚犯。 不過,如果囚犯正在睡覺,就沒辦法救出他們,因為囚犯會被 Annalyn 突然出現嚇到,進而吵醒騎士和弓箭手。

你有四項任務:根據森林裡三個角色的狀態,以及 Annalyn 的寵物狗是否在場,實作判斷上述行動是否可行的邏輯。

1. 檢查是否能發動快速攻擊

實作(static)AnnalynsInfiltration.canFastAttack()方法,它接受一個布林值,表示騎士是否醒著。 根據騎士的狀態,如果可以發動快速攻擊,這個方法會回傳true。 否則,它會回傳false:

boolean knightIsAwake = true;
AnnalynsInfiltration.canFastAttack(knightIsAwake);
// => false

2. 檢查是否能刺探這個團體

實作(static)AnnalynsInfiltration.canSpy()方法,它接受三個布林值,分別表示騎士、弓箭手和囚犯是否醒著。 根據這三個角色的狀態,如果可以刺探這個團體,這個方法會回傳true。 否則,它會回傳false:

boolean knightIsAwake = false;
boolean archerIsAwake = true;
boolean prisonerIsAwake = false;
AnnalynsInfiltration.canSpy(knightIsAwake, archerIsAwake, prisonerIsAwake);
// => true

3. 檢查是否能向囚犯打暗號

實作(static)AnnalynsInfiltration.canSignalPrisoner()方法,它接受兩個布林值,分別表示弓箭手和囚犯是否醒著。 根據這兩個角色的狀態,如果可以向囚犯打暗號,這個方法會回傳true。 否則,它會回傳false:

boolean archerIsAwake = false;
boolean prisonerIsAwake = true;
AnnalynsInfiltration.canSignalPrisoner(archerIsAwake, prisonerIsAwake);
// => true

4. 檢查是否能釋放囚犯

實作(static)AnnalynsInfiltration.canFreePrisoner()方法,它接受四個布林值。 前三個參數分別表示騎士、弓箭手和囚犯是否醒著。 最後一個參數表示 Annalyn 的寵物狗是否在場。 根據這三個角色的狀態以及 Annalyn 的寵物狗是否在場,如果可以釋放囚犯,這個方法會回傳true。 否則,它會回傳false:

boolean knightIsAwake = false;
boolean archerIsAwake = true;
boolean prisonerIsAwake = false;
boolean petDogIsPresent = false;
AnnalynsInfiltration.canFreePrisoner(knightIsAwake, archerIsAwake, prisonerIsAwake, petDogIsPresent);
// => false
透過 GitHub 編輯 連結會在新視窗或分頁中開啟
Java Exercism

準備好開始 安娜琳的滲透行動 了嗎?

註冊 Exercism,透過 26 個概念158 個練習 和真人引導來學習並精通 Java,全部免費。