我正在處理一個當前正在嘗試調試的任務。我有很多error: (method name) in class (SuperClass Name) cannot be applied to given types;
。該項目將圍繞Procedural編程的遊戲重新設計爲同一款遊戲,但現在圍繞OOP。我是Java新手,並且負責創建許多類,其中兩個是超類的子類(顯然),我已經給出了具有哪些方法以及它們的參數。我遇到的問題是,一個子類中的一個方法應該控制兩個角色之間的戰鬥,即玩家和敵人。這兩個類都是字符類(超類)的子類。由於這是一個班級任務,我不想發佈我擁有的所有東西,但下面是我嘗試執行的戰鬥方法的一個例子。我遇到,並繼續在總體上具有「繼承」,問題是究竟什麼是父/子類,以及如何通過他們每個人之間存在一定的值/變量之間的繼承。Java:在自己的方法中引用一個類
在下面的示例代碼中,此方法嵌套在擴展Character
類的Player
類中。該方法需要使用Enemy
類中的敵人並執行其中的動作。根據結果,我將布爾值傳回給我的程序的主要方法。
我的問題是這樣的;我不確定如何在「Player
」類下包含的方法中調用已在此示例中創建「Player
」類的類。當被調用時,我被要求使用一個參數作爲參數,Enemy
。我確信我沒有以適當的方式接近這個特定的任務,並且有更好的方法來解決這個問題。但任何幫助理解什麼是可能的是非常感謝,因爲它會幫助我以正確的方式處理這項任務。從Player
類
抽樣方法如下:
public abstract class Character{ //Character Superclass - attack method called
public int attack(Player _player){
Random randomNumbers = new Random();
int enemyRandAtk = randomNumbers.nextInt(Weapon.getMaxDamage - Weapon.getMinDamage) + Weapon.getMinDamage;
int enemyAtk = enemyRandAtk + getStrength();
int charRemainingHP = _player.getHitPoints() - enemyAtk; //can I call _player in the Character class????
System.out.printf("%s attacks with ATK = %d + %d = %d\n", getName(), getStrength(), enemyRandAtk, enemyAtk);
System.out.printf("%s HP is now %d - %d = %d\n\n", _player.getName(), _player.getHitPoints(), enemyAtk, charRemainingHP);
return charRemainingHP;
}
public class Player extends Character{
public int attack(Enemy _enemy){
Random randomNumbers = new Random();
int enemyHP = _enemy.getHitPoints();
int charRandAtk = randomNumbers.nextInt(Weapon.getMaxDamage - Weapon.getMinDamage) + Weapon.getMinDamage;
int charAtk = charRandAtk + getStrength();
int enemyRemainingHP = _enemy.getHitPoints() - charAtk;
System.out.printf("\n\n%s attacks with ATK = %d + %d = %d\n", getName(), getStrength(), charRandAtk, charAtk);
System.out.printf("%s HP is now %d - %d = %d\n\n", _enemy.getName(), enemyHP, charAtk, enemyRemainingHP);
return enemyRemainingHP;
}
public boolean battleWizard(Enemy _enemy){
Random randomNumbers = new Random();
Scanner userInput = new Scanner(System.in);
int spellCast = randomNumbers.nextInt(4) + 1;
System.out.printf("*** %s vs The Evil Wizard ***\n\n", getName()); //getName() is in Player Class
boolean charWinning = false;
int updWizHP = _enemy.getHitPoints(); //****** Question 1. below
do{
System.out.print("Choose your action: \n" +
"1. Attack\n" +
"2. Attempt Spell Cast\n\n" +
"What would you like to do?: ");
int battleDecision = userInput.nextInt();
if (battleDecision == 1){
updWizHP = Player.attack(_enemy); //**** Question #2 Below
if (updWizHP <= 0){
charWinning = true;
break;
}
}else if(battleDecision == 2){
System.out.print("Enter your guess: ");
int playerGuess = userInput.nextInt();
if (playerGuess == spellCast){
System.out.printf("The %s's spell is cast successfully! The Wizard's HP is now 0!\n\n", getName());
charWinning = true;
updWizHP = 0;
break;
}else{
System.out.print("Your spell missed the Wizard. Now he attacks!\n");
}
}
if (getHitPoints() > 0){
enemyDamage = Enemy.attack();
decreaseHitPoints(_enemy.attack(Player)); \\**** Question #3 below
if (getHitPoints() < 0){
charWinning = false;
break;
}
}
}while(getHitPoints() > 0 && _enemy.getHitPoints() > 0);
if (charWinning)
return true;
else
return false;
}
}
請記住,這是一個擁有大致相同的方法(Enemy
)總之這一個的子類(Player
)內的方法和其他一些人。
在我的代碼在上文中,這裏是我的具體問題:
的方法
battleWizard
(在筆記#1題)6號線 - 由於此方法駐留在Player
類,我可以引用Enemy
這樣的課?如果沒有,那麼這樣做的更好方法是什麼?行12在方法
battleWizard
(#2問題中註釋) - 當方法(代碼示例)在類本身中時,如何引用一個具有以其自己的名稱創建的對象的類?我想讓最終用戶的玩家player
並在其內引用該對象,如果這有意義的話?我試圖想象編譯器將如何執行這個任務,並且無法想象這會工作。13來自底部的行(注意#3問題參考): a)您可以將方法作爲參數傳遞給Java中的另一種方法嗎? b)是否像這樣調用另一個子類(與調用類的子類相同的子類)的正確方法還是甚至可能?
謝謝你的幫助。正如我之前提到的,由於這是一個班級任務,我不想提供更多的代碼樣本。但不可避免的是,如果它幫助我理解,那麼我會。請讓我知道你需要什麼進一步的信息。
ETA: 我添加了額外的代碼來描述super和子類之間的關係。對於Enemy
的子類,它依賴於超類的Character
攻擊方法。所以在我上面的代碼示例中,我希望它能澄清3.b.我的問題。任何進一步的信息,請讓我知道。
理想情況下,不是向我們展示更多實際代碼,而是創建一個簡短但完整的示例來演示*只是*問題。你可以通過獲取真實代碼的副本,並刪除所有不相關的,一點一點的,確保你仍然有錯誤。它不需要做任何有用的事情 - 它只需要以我們可以複製的方式展示問題。 –
因爲文本編輯器的格式和所有..告訴行號無法幫助..請評論代碼的東西像'#question1','#question3.a','#question3.b' ..你當前嘗試把代碼註釋是不是真的有幫助.. – hagrawal
你不叫課堂。你調用方法。從其他方法調用它們是正常的。你的問題,或者至少你的頭銜,還不清楚。 – EJP