[英]How to access the parameters of objects contained within an arrayList java
我是Java編程的新手,我正在尋找一個簡單的基於文本的游戲。 我目前正在嘗試開發允許用戶選擇可播放單元的功能。
這是我現在要工作的一些代碼示例。 我粘貼了構造函數單元類,游俠單元類以及游戲循環類開頭的部分,您可以在其中看到問題。 然后,您可以進一步查看我將如何用某種類型的代碼替換所有的“ rangerObj0。(無論對象參數是否相關)”,這將使我能夠引用潛在的不同對象並訪問其參數。 我使用ArrayList的唯一原因是因為我認為這是“制作”我自己的對象變量的一種簡單方法,以后可以引用。 我正在嘗試像這樣訪問對象參數,但是它不起作用。
playerChar.get(0).unitMoves
如果這里缺少我想要的東西,或者有更好的方法可以做到這一點,我敢肯定,請告知。 謝謝您的時間和幫助!
我已經花了很多時間在網上進行研究,或者我不知道要搜索的正確術語,或者我只是沒有考慮我已經學習的某些功能。 無論如何,我覺得我沒有辦法獨自完成這項工作,所以我在這里發布了。
單元構造器類
public abstract class Unit {
// instance fields
String unitName;
int unitHealth;
int unitMoves;
int unitDmg;
// constructor method
protected Unit(String name, int health, int dmg, int moves) {
unitName = name;
unitHealth = health;
unitDmg = dmg;
unitMoves = moves;
}
}
游騎兵部隊
import java.util.Random;
public class Ranger extends Unit{
public Ranger(String name, int health, int dmg, int moves) {
super(name, health, dmg, moves);
}
游戲循環類
import java.util.Scanner;
import java.util.ArrayList;
public class Game {
public static void main(String[] args) {
boolean gameLoop = true;
Scanner keyboard = new Scanner(System.in);
int player;
Ranger rangerObj0 = new Ranger("Ranger", 100, 10, 4);
Heavy heavyObj0 = new Heavy("Ranger", 100, 20, 4);
Monster monsterObj0 = new Monster("Steel Head", 150, 10, 3);
//Start of game ----------------------------------------------------------
System.out.println("Select you character!");
System.out.println("Enter 1 for Ranger(100, 10, 4)");
System.out.println("Enter 2 for Heavy (100, 20, 4)");
int resp = keyboard.nextInt();
這是我嘗試使用的ArrayList和相關的if語句,它緊接在前面的代碼之后
ArrayList<Object> playerChar = new ArrayList<Object>();
if (resp == 1){
playerChar.add(rangerObj0);
} else if (resp == 2) {
playerChar.add(heavyObj0);
} else {
System.out.println("Please enter a valid responce!");
}
下面的注釋部分保留在其中,以顯示游戲循環的開始位置
在這里您可以看到我嘗試通過.get()方法引用對象參數的第一個實例
/*while(gameLoop == true) {
playerChar.get(0).unitMoves = 4; /* <--------- */
monsterObj0.unitMoves = 3;
boolean endPlayerTurn = false; */
while (endPlayerTurn == false) {
System.out.println("Your "+rangerObj0.unitName+" is ready to fight! What do you want to do?");
System.out.println("Enter 1 to rappid fire for 2 movment points");
System.out.println("Enter 2 to pistol fire for 1 movment point");
System.out.println("Enter 3 to end turn");
resp = keyboard.nextInt();
if (resp == 1) {
rangerObj0.rapidFire(monsterObj0);
} else if (resp == 2) {
rangerObj0.rapidFire(monsterObj0);
} else if (resp == 3) {
System.out.println("Player turn ended!");
endPlayerTurn = true;
} else if (rangerObj0.unitMoves == 0) {
System.out.println(rangerObj0.unitName +" is out of moves! Do you want to end turn by typing 3?");
} else {
System.out.println("please enter a valid response!");
}
}
//End of player turn -----------------------------------------------------
NPC回合將是下一個,然后是游戲循環的結束或重復。
這是我在嘗試通過.get()方法引用對象參數時遇到的錯誤,如我在上面指出的代碼的游戲循環部分中所見
“ unitMoves無法解析或不是有效字段”
有一種方法可以使泛型類型為Object的ArrayList起作用。 如果編寫以下代碼:
Object currentUnit = playerChar.get(0);
if (currentUnit instanceof Ranger) {
Ranger ranger = (Ranger) currentUnit;
//do what a Ranger should do...
} else if (currentUnit instanceof Heavy) {
Heavy heavy = (Heavy) currentUnit;
//do what a Monster should do...
} else {
Monster monster = (Monster) currentUnit;
//do what a Monster should do...
}
,那么應該可以。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.