2017-05-30 3 views
0

さて、私はタイプ<String, Ranged>(Rangedは別のクラスです)の静的HashMapを含むWeaponListというクラスを持っています。RangedクラスはWeaponという別のクラスも拡張しています。Java - HashMapの一部の項目のみを使用できるようにするクラスメソッドの条件を記述します。

私はスカウトと呼ばれる別のクラスを持っています。スカウトは、武器(霊長類が覚えている)とポイントのintの構成です。また、ScoutSquadクラスはgetメソッドとsetメソッドを持つScoutsの集まりであることを指摘しておきます。あなたはスカウト「ボルトピストル」である各スカウトのデフォルト遠隔武器オブジェクトと、デフォルトのポイントをinstaniateとき

だから、メインプログラムでは、あるスカウトクラスの今13

は、アップグレードするオプションをtheresのあなたの武器をrangedUpgrade(Ranged ranged)メソッドで呼び出します。したがって、このコード行を使用するメインプログラムでは、scouts.getScout(5).rangedUpgrade(WeaponList.getRanged("Shotgun"));はスカウトをインデックス5で正常にアップグレードし、新しい武器とスカウトの新しいポイントを表示します(各武器に関連付けられているポイントがあります)。

現在、 WeaponListクラスHashMap内の任意の遠回りの武器に移動します。 ScoutがHashMap内の特定のRanged武器にしかアップグレードできないようにしたいと思います。私はすでにif文で条件を設定しようとしましたが、これまでのところ成功していません。 (Scoutクラスの27行目〜35行目)

すべてのrelavantクラスにコードを提供し、誰かがこれを助けることを願っています。

ありがとうございました。

はWeaponListクラス

package armoury1; 

import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.HashMap; 
import java.util.Iterator; 
import java.util.List; 
import java.util.Map; 

import troops.scouts.Scout; 

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; 
    } 
} 

スカウトクラスは

package troops.scouts; 

import armoury.Wargear; 
import armoury1.Melee; 
import armoury1.Ranged; 
import armoury1.Weapon; 
import armoury1.WeaponList; 

public class Scout 
{ 
    private Weapon ranged, melee; 
    private int points; 

    //DEFAULT SCOUT 
    public Scout() 
    {  
     ranged = new Ranged("Bolt Pistol", 0); 
     melee = new Melee("Close Combat Weapon", 0); 

     points = 13; 
     points = points + ranged.getWeaponPoints() + melee.getWeaponPoints(); 

    } 

    public void rangedUpgrade(Ranged ranged) 
    {  
     if (ranged.equals(WeaponList.getRanged("Shotgun"))); 
     {  
      this.ranged = ranged; 
      points = points + ranged.getWeaponPoints(); 
     } 


     else 
      System.out.println("Can not have this weapon"); 
    } 

    public void meleeUpgrade(Melee melee) 
    { 
     this.melee = melee; 
     points = points + melee.getWeaponPoints(); 
    } 

    public Weapon getRangedUpgrade() 
    { 
     return ranged; 
    } 

    public Weapon getMeleeUpgrade() 
    { 
     return melee; 
    } 

    @Override 
    public String toString() 
    { 
     return "|| " + "Ranged Weapon: " + ranged + " || " + "Melee Weapon: " + melee + " || " + "Points: " + points; 
    } 
} 

メインプログラムは

package main; 

import java.util.ArrayList; 
import java.util.List; 
import java.util.Scanner; 
import armoury1.Melee; 
import armoury1.Ranged; 
import armoury1.Weapon; 
import armoury1.WeaponList; 
import troops.scouts.Scout; 
import troops.scouts.ScoutSergeant; 
import troops.scouts.ScoutSquad; 

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("Shotgun")); 
     scouts.getScout(5).meleeUpgrade(WeaponList.getMelee(3)); 

     System.out.println(scouts.getScoutSquad()); 

     input.close(); 
    } 
} 

遠距離クラス(拡張武器)

package armoury1; 

import java.util.ArrayList; 
import java.util.List; 

import troops.scouts.Scout; 

public class Ranged extends Weapon 
{  
    public Ranged(String name, int points) 
    {  
     super(name, points); 
    } 
} 
+1

???:

として、このメソッドのコードを変更してくださいそのような***行がないことを覚えておいてください。ここでは私たちのために27〜35 ***の線があります。 –

+0

@スカイプそれらのすべてにアップグレードすることができます。ですから、ScoutクラスのupgradeRangedメソッドで条件を設定する必要があります – GR412

+0

Rangedクラスのソースコードを提供してください。 –

答えて

1

.equals()メソッドをRangedクラスに実装してください。

また、入れたrangedUpgrade(Ranged ranged)のif条件は、同じ行で終了します。問題が何であるかを

public void rangedUpgrade(Ranged ranged) {  
     if (ranged.equals(WeaponList.getRanged("Shotgun"))){  
      this.ranged = ranged; 
      points = points + ranged.getWeaponPoints(); 
     } else 
      System.out.println("Can not have this weapon"); 
     } 
} 
+0

よろしくお願いします。数分お待ちください – GR412

+0

大変ありがとうございます。また、switch文がHashMapとは異なる武器の複数の条件で動作するかどうか尋ねてもいいですか? – GR412

+0

複数の条件がある場合は、switch文も使用できます。 –

関連する問題