我正在开发我的第一个Java项目,这是一个基本的角色扮演游戏.现在我处理法术,我需要一些OOD指导.
我有Character,这是一个abstract class.Character有一些subclasses(如mage,fighter,rogue,cleric).
Mage和cleric(作为now,牧师没有法力,但它可能会改变)都拼写脚轮.
我也有一个Spell班,有一些信息(如spell name,mana cost等).MageSpellsList并且ClericSpellsList是另一个类,并且都有类法术列表.而且我也有Effects课(施放咒语应该使用它).
什么是一个很好的面向对象设计来处理法术(解决方案不应该包括Effects类,我可以稍后处理)?
也许使用"SpellCaster"界面和一些方法,比如castSpell和showSpellbook,那么Mage和Cleric会实现这个界面吗?.
也许MageSpellsList和ClericSpellsList应该是Spell的子类?我的目标是使用castSpell("spell name here")并让castSpell通过使用一个好的OOD来完成这项工作,而不是为每个法术编写一个特定的方法(并且在mage和Cleric之间没有重复的代码)
Mage.java:
public class Mage extends Character {
private List<Spell> spellBook;
private int mana;
private int CurrentMana;
public Mage(String name) {
super(name);
setName(name);
setCharacterClass("Mage");
setLevel(1);
setHitDice(4);
setStrength(10);
setConstitution(10);
setDexterity(14);
setIntelligence(16);
setWisdom(14);
setCharisma(10); …Run Code Online (Sandbox Code Playgroud) 我有一个投资组合类,也有投资类的链表(例如 - 谷歌是投资的一个实例),每个投资都有一个交易历史(另一个链表),每个交易的数据.
当用户想要进行交易(以5K购买谷歌股票)时,我需要找出投资(在谷歌中)是否已经存在于投资列表中.如果没有 - 添加新的投资(并为其交易历史添加交易),如果确实如此 - 只需添加另一个链接到谷歌的tradeHistory链表.
问题 - 我需要findInvestment方法从投资列表返回对谷歌(投资实例)的引用,以便我可以更新其交易历史.该方法返回一个listIterator而不是对investmentList中的位置的引用(应该是投资类).我该如何纠正findInvestment?(发现= iter错了)
public class Portfolio {
private LinkedList<Investment> investmentsList;
public Portfolio() {
investmentsList = new LinkedList<Investment>();
}
public void addInvestment(String symbol, double money){
Investment invest = findInvestment(symbol);
if (invest == null) {
System.out.println("symbol does not exist");
getInvestmentsList().add(new Investment(symbol,money));
System.out.println("New invetment has been added to your portfolio - " +symbol);
} else {
invest.addTrade(symbol,money);
System.out.println("A new trade has been added to the current investment - " + symbol);
}
}
public …Run Code Online (Sandbox Code Playgroud) 我正在用java做我的第一步,所以我的问题很简单 - 我有一个包含8个整数的数组,我想返回一个包含原始数组中奇数索引元素的数组.减速方法有什么问题?任何其他实施技巧将不胜感激.
PS - 我知道我不必在这里使用方法,它只是用于练习.
package com.tau;
public class Main {
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4, 5, 6, 7, 8};
System.out.println("1.e odd index numbers in array : " + oddIndex(arr));
int j = 0;
public static int[] oddIndex(int[] array){
int newArrSize = array.length;
if ((newArrSize % 2) != 0) {
newArrSize--;
}
int[] newArr = new int[newArrSize];
for (int i = 0; i < array.length; i++)
if ((array[i] % 2) == …Run Code Online (Sandbox Code Playgroud) 我有一个关于封装的问题:
当一个类有很多数据字段时,是否建议使用封装?
使用以下类作为示例:
abstract public class Character {
private String name;
private String characterClass;
private int level;
private int hitDice;
private int strength;
private int constitution;
private int dexterity;
private int intelligence;
private int wisdom;
private int charisma;
private int hp;
private int currentHp;
private int armorClass;
private int BaseAttackBonus;
private long xp;
private double gp;
private Inventory inventory;
private double carriedWeight;
private Equipment equipment;
protected Character(String name) {
setName(name);
setCharacterClass("Class");
setLevel(1);
setHitDice(0);
setStrength(10);
setConstitution(10);
setDexterity(10);
setIntelligence(10);
setWisdom(10);
setCharisma(10);
setHp((int) …Run Code Online (Sandbox Code Playgroud) 在大学讲座讲师说,使用getClass和instanceof表明一个糟糕的设计.
什么是不良设计的示例用法?使用这些方法可能导致什么问题?这些方法是否有任何有效的用法,这些设计都不错?
我正在尝试将谷歌云上的存储桶(跟踪数据)中的全部数据下载到 Linux 系统上的实例(实例 1)。
我在这里看到了一些选项:https : //cloud.google.com/compute/docs/instances/transfer-files#transfergcloud 但我不确定有没有办法从存储桶下载到实例。
我正在通过我的终端访问我的实例,并且我已经使用 gsutil 进行了几次尝试,但到目前为止还没有成功。知道如何将整个存储桶下载到我的实例中吗?(最好将它放在 MDNet/data 中,我还没有这样的目录,但我可能应该将数据存储在那里)。