簡體   English   中英

如何訪問arrayList中包含的對象的參數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM