Java - 确保 collection 中的物品只能使用一次
Java - Ensuring an item from a collection can only be used once
所以我试图确保如果静态哈希图中的某个项目被多次使用,那么它不允许您再次使用它。该计划背后的想法是,一个 Scout 小队的每个小队不能超过一个 "heavy bolter" 和 "missle launcher"。请注意,"heavy bolter" 和 "missle launcher" 是散列映射 collection.
中的两个散列映射键
所以我有一个名为 WeaponList 的 class,它包含远程武器的静态哈希图。然后我有一个 Scout class 允许 Scout 从构造函数中的默认设置升级它的远程武器。然而,WeaponList classes hashmap 中的某些项目只允许升级一次。因此,如果 Scout 升级到 "Heavy Bolter" 并且已经有一名小队成员拥有该武器,则不应进行升级。
有办法吗?我已经在 Scout classes upgradeRanged 方法中尝试了这行代码。 if (WeaponList.getRanged("Heavy Bolter") > 1))
但这行不通,因为我认为使用“>”符号在原始类型和引用类型之间不起作用。
我还应该提一下,我还有另一个名为 ScoutSquad 的 class,它是 Scouts 的集合。在主程序中,您创建一个 ScoutSquad Object 引用,然后将 Scout objects 添加到 ScoutSquad。每个 Scout 都可以单独升级他们的默认武器。 (我可能正在考虑使用 ScoutSquad class 来确保 HashMap 中的远程武器不能被多次使用)。
如有任何帮助,我们将给予帮助,如果对问题有任何混淆,请告诉我,我会进行适当的更改。
我现在将提供相关的代码 classes:
武器列表Class
public class WeaponList
{
static Map<String, Ranged> rangedlist = new HashMap<String, Ranged>()
{{
put("Bolter", new Ranged2H("Bolter", 1));
put("Bolt Pistol", new Ranged("Bolt Pistol", 1));
put("Flamer", new Ranged2H("Flamer", 1));
put("Meltagun", new Ranged2H("Meltagun", 1));
put("Plasma Gun", new Ranged2H("Plasma Gun", 1));
put("Plasma Pistol", new Ranged("Plasma Pistol", 10));
put("Shotgun", new Ranged2H("Shotgun", 10));
put("Sniper Rifle", new Ranged2H("Sniper Rifle", 5));
put("Assault Cannon", new Ranged2H("Assault Cannon", 10));
put("Cyclone Missle Launcher", new Ranged2H("Cyclone Missle Launcher", 10));
put("Heavy Bolter", new Ranged2H("Heavy Bolter", 10));
put("Heavy Flamer", new Ranged2H("Heavy Flamer", 10));
put("Assault Cannon", new Ranged2H("Lascannon", 10));
put("Missle Launcher", new Ranged2H("Missle Launcher", 10));
put("Multi Melta", new Ranged2H("Multi Melta", 10));
put("Plasma Cannon", new Ranged2H("Plasma Cannon", 10));
}};
public static Ranged getRanged(String index)
{
return rangedlist.get(index);
}
public static Map<String, Ranged> getRangedList()
{
return rangedlist;
}
}
Scout class(关注upgradeRanged方法)
public class Scout
{
private Weapon ranged;
private int points;
//DEFAULT SCOUT
public Scout()
{
ranged = new Ranged("Bolt Pistol", 0);
points = 13;
points = points + ranged.getWeaponPoints();
}
public void rangedUpgrade(Ranged ranged)
{
switch(ranged.toString())
{
case "Bolter" :
case "Shotgun" :
case "Sniper Rifle" :
case "Heavy Bolter" :
case "Missle Launcher" :
this.ranged = ranged;
points = points + ranged.getWeaponPoints();
break;
default :
System.out.println("A Scout can't have a " + ranged);
}
if (WeaponList.getRanged("Heavy Bolter") > 1))
{
}
}
public Weapon getRangedUpgrade()
{
return ranged;
}
@Override
public String toString()
{
return "|| " + "Ranged Weapon: " + ranged + " || " + "Melee Weapon: " + melee + " || " + "Points: " + points;
}
}
主程序:
public class ArmyBuilderDemo
{
public static void main(String[] args) throws Exception
{
ScoutSquad scouts = new ScoutSquad("Squad 1");
Scanner input = new Scanner(System.in);
System.out.println("Enter the squad size: ");
int size = input.nextInt();
for (int i = 0; i < size; i++)
scouts.addScout(new Scout());
System.out.println(scouts.getScoutSquad());
scouts.getScout(5).rangedUpgrade(WeaponList.getRanged("Heavy Bolter"));
System.out.println(scouts.getScoutSquad());
input.close();
}
}
HashMap.get()
returns null
如果项目不在 Map
中。因此你可以这样做:
if(WeaponList.getRanged("Heavy Bolter") != null) {
// Already has
else {
// Doesn't have
}
将此添加到 ScoutSquad Class:
public boolean checkUses(String weapon) {
for (Scout scout : scouts)
if (scout.getRangedUpgrade() == WeaponList.getRanged(weapon)
return true;
return false;
}
更改 rangedUpgrade Scout 的方法 Class:
public void rangedUpgrade(Ranged ranged)
{
switch(ranged.toString())
{
case "Heavy Bolter" :
case "Missle Launcher" :
if (getSquad().checkUses(ranged.toString())) {
System.out.println(
"This scout's squad is already using a " + ranged);
break;
}
case "Bolter" :
case "Shotgun" :
case "Sniper Rifle" :
this.ranged = ranged;
points = points + ranged.getWeaponPoints();
break;
default :
System.out.println("A Scout can't have a " + ranged);
break;
}
}
所以我试图确保如果静态哈希图中的某个项目被多次使用,那么它不允许您再次使用它。该计划背后的想法是,一个 Scout 小队的每个小队不能超过一个 "heavy bolter" 和 "missle launcher"。请注意,"heavy bolter" 和 "missle launcher" 是散列映射 collection.
中的两个散列映射键所以我有一个名为 WeaponList 的 class,它包含远程武器的静态哈希图。然后我有一个 Scout class 允许 Scout 从构造函数中的默认设置升级它的远程武器。然而,WeaponList classes hashmap 中的某些项目只允许升级一次。因此,如果 Scout 升级到 "Heavy Bolter" 并且已经有一名小队成员拥有该武器,则不应进行升级。
有办法吗?我已经在 Scout classes upgradeRanged 方法中尝试了这行代码。 if (WeaponList.getRanged("Heavy Bolter") > 1))
但这行不通,因为我认为使用“>”符号在原始类型和引用类型之间不起作用。
我还应该提一下,我还有另一个名为 ScoutSquad 的 class,它是 Scouts 的集合。在主程序中,您创建一个 ScoutSquad Object 引用,然后将 Scout objects 添加到 ScoutSquad。每个 Scout 都可以单独升级他们的默认武器。 (我可能正在考虑使用 ScoutSquad class 来确保 HashMap 中的远程武器不能被多次使用)。
如有任何帮助,我们将给予帮助,如果对问题有任何混淆,请告诉我,我会进行适当的更改。
我现在将提供相关的代码 classes:
武器列表Class
public class WeaponList
{
static Map<String, Ranged> rangedlist = new HashMap<String, Ranged>()
{{
put("Bolter", new Ranged2H("Bolter", 1));
put("Bolt Pistol", new Ranged("Bolt Pistol", 1));
put("Flamer", new Ranged2H("Flamer", 1));
put("Meltagun", new Ranged2H("Meltagun", 1));
put("Plasma Gun", new Ranged2H("Plasma Gun", 1));
put("Plasma Pistol", new Ranged("Plasma Pistol", 10));
put("Shotgun", new Ranged2H("Shotgun", 10));
put("Sniper Rifle", new Ranged2H("Sniper Rifle", 5));
put("Assault Cannon", new Ranged2H("Assault Cannon", 10));
put("Cyclone Missle Launcher", new Ranged2H("Cyclone Missle Launcher", 10));
put("Heavy Bolter", new Ranged2H("Heavy Bolter", 10));
put("Heavy Flamer", new Ranged2H("Heavy Flamer", 10));
put("Assault Cannon", new Ranged2H("Lascannon", 10));
put("Missle Launcher", new Ranged2H("Missle Launcher", 10));
put("Multi Melta", new Ranged2H("Multi Melta", 10));
put("Plasma Cannon", new Ranged2H("Plasma Cannon", 10));
}};
public static Ranged getRanged(String index)
{
return rangedlist.get(index);
}
public static Map<String, Ranged> getRangedList()
{
return rangedlist;
}
}
Scout class(关注upgradeRanged方法)
public class Scout
{
private Weapon ranged;
private int points;
//DEFAULT SCOUT
public Scout()
{
ranged = new Ranged("Bolt Pistol", 0);
points = 13;
points = points + ranged.getWeaponPoints();
}
public void rangedUpgrade(Ranged ranged)
{
switch(ranged.toString())
{
case "Bolter" :
case "Shotgun" :
case "Sniper Rifle" :
case "Heavy Bolter" :
case "Missle Launcher" :
this.ranged = ranged;
points = points + ranged.getWeaponPoints();
break;
default :
System.out.println("A Scout can't have a " + ranged);
}
if (WeaponList.getRanged("Heavy Bolter") > 1))
{
}
}
public Weapon getRangedUpgrade()
{
return ranged;
}
@Override
public String toString()
{
return "|| " + "Ranged Weapon: " + ranged + " || " + "Melee Weapon: " + melee + " || " + "Points: " + points;
}
}
主程序:
public class ArmyBuilderDemo
{
public static void main(String[] args) throws Exception
{
ScoutSquad scouts = new ScoutSquad("Squad 1");
Scanner input = new Scanner(System.in);
System.out.println("Enter the squad size: ");
int size = input.nextInt();
for (int i = 0; i < size; i++)
scouts.addScout(new Scout());
System.out.println(scouts.getScoutSquad());
scouts.getScout(5).rangedUpgrade(WeaponList.getRanged("Heavy Bolter"));
System.out.println(scouts.getScoutSquad());
input.close();
}
}
HashMap.get()
returns null
如果项目不在 Map
中。因此你可以这样做:
if(WeaponList.getRanged("Heavy Bolter") != null) {
// Already has
else {
// Doesn't have
}
将此添加到 ScoutSquad Class:
public boolean checkUses(String weapon) {
for (Scout scout : scouts)
if (scout.getRangedUpgrade() == WeaponList.getRanged(weapon)
return true;
return false;
}
更改 rangedUpgrade Scout 的方法 Class:
public void rangedUpgrade(Ranged ranged)
{
switch(ranged.toString())
{
case "Heavy Bolter" :
case "Missle Launcher" :
if (getSquad().checkUses(ranged.toString())) {
System.out.println(
"This scout's squad is already using a " + ranged);
break;
}
case "Bolter" :
case "Shotgun" :
case "Sniper Rifle" :
this.ranged = ranged;
points = points + ranged.getWeaponPoints();
break;
default :
System.out.println("A Scout can't have a " + ranged);
break;
}
}