2016-09-29 17 views
0

"Itemクラスのコンストラクタ項目は、指定された型には適用できません
必須:java.lang.String、java.land.String、int、int、java.lang理由:実際と正式なarguetnリストの長さが異なる "ItemクラスのコンストラクタItemは、指定された型には適用できません

私の完全なエラーメッセージは、私が呼び出されたときarraylistからランダムな剣の名前を与える方法を取得しようとしています。簡単にするため

iは2つの異なるpastebinsにクラスコードを貼り付け:
Class Swords
Class Item
編集:コード...

import java.util.Random; 
    import java.util.ArrayList; 
    import java.util.HashMap; 
    /** 
    * Write a description of class Swords here. 
    * 
    * @author (your name) 
    * @version (a version number or a date) 
    */ 
    public class Swords extends Item 
    { 
    // instance variables - replace the example below with your own 
    private int dmg; 
    ArrayList<String> swordNames = new ArrayList(); 
    HashMap<String,String> swordDesc = new HashMap<String,String>(); 

    /** 
    * Constructor for objects of class Swords 
    */ 
    public Swords() 
    { 
     generateSwordName(); 
     super(getRandomSword(), "asd", 40, 40, "Item"); 
     dmg = generateRandom(2, 50); 
    } 

    public int generateRandom(int Start, int End) 
    { 
    int START = Start; 
     int END = End; 
     Random random = new Random(); 
     long range = (long)END - (long)START +1; 
     long fraction = (long)(range * random.nextDouble()); 
     int randomNumber = (int)(fraction + START); 
     return randomNumber; 
    } 

    public void generateSwordName() 
    { 
     swordNames.add("Blade of Slimer"); 
     swordDesc.put("Blade of Slimer", new String("Blade of Slimer is a sword forged from the waste of Slimer, surprisingly durable.")); 
     swordNames.add("Thorny Farris"); 
     swordDesc.put("Thorny Farris", new String("A rose thorn was accidently dropped into a bottle of Farris, and a majestic sword emerged from the bottle")); 
     swordNames.add("The Sword of Leah"); 
     swordDesc.put("The Sword of Leah", new String(" A sword carried by the Leah family for generations, later given the ability to cut through magic.")); 
     swordNames.add("Grayswandir"); 
     swordDesc.put("Grayswandir", new String("A sword used by Corwin of Amber. Grayswandir is associated with the moon and the night.")); 
     swordNames.add("Werewindle"); 
     swordDesc.put("Werewindle", new String("A sword used by Brand of Amber. Werewindle is associated with the sun and day.")); 
     swordNames.add("Dull Sword"); 
     swordDesc.put("Dull Sword", new String("A dull sword")); 

    } 

    public String getRandomSword() 
    { 
     int swordSize = swordNames.size()-1; 
     String randomSwords = swordNames.get(generateRandom(0,swordSize)); 
     return randomSwords; 
    } 


    /** 
    * Skriver ut informasjon om itemet. 
    */ 
    public void print() 
    { 
     int minDmg = dmg - 2; 
     int maxDmg = dmg + 2; 
     System.out.println("########################"); 
     System.out.println("# Name of item: " + super.getName()); 
     System.out.println("# Item description: " + super.getDesc()); 
     System.out.println("# Sword damage: " + minDmg + "-" + maxDmg); 
     System.out.println("# Item value: " + super.getValue() + " coins"); 
     System.out.println("# Item weight: " + super.getWeight() + "kg"); 
     System.out.println("########################"); 
    } 
} 

Itemクラス:

import java.util.HashSet; 
/** 
* Write a description of class Item here. 
* 
* @author Thomas andré G. Petersson 
* @version 29.09.2016 | v0.1 
* 
* Item 

*/ 
public class Item 
{ 

    private String itemName; 
    private String desc; 
    private int value; 
    private int weight; 
    private String action; 

    public Item(String itemName, String desc, int value, int weight, String action) 
    { 
     this.itemName = itemName; 
     this.desc = desc; 
     this.value = value; 
     this.weight = weight; 
     this.action = action; 
    } 
    // Getters for bruk av arvings klasser ############################# 
    public String getName() 
    { 
     return itemName; 
    } 

    public String getDesc() 
    { 
     return desc; 
    } 

    public int getValue() 
    { 
     return value; 
    } 

    public int getWeight() 
    { 
     return weight; 
    } 

    public String getAction() 
    { 
     return action; 
    } 
    //################################################################## 


    /** 
    * Skriver ut informasjon om itemet. 
    */ 
    public void print() 
    { 
     System.out.println("########################"); 
     System.out.println("# Name of item: " + itemName); 
     System.out.println("# Item description: " + desc); 
     System.out.println("# Item value: " + value + " coins"); 
     System.out.println("# Item weight: " + weight + "kg"); 
     System.out.println("########################"); 
    } 
} 
+0

ここに投稿するのに慣れていない、私はペーストビンが多くのconventientになるだろうと思った。私の悪い – Peebl

+0

心配しない...あなたの質問にコードを投稿していただきありがとうございます。 – brso05

答えて

1

異なる剣の名前に関するコードは、特定の剣のインスタンスに対して特別なものではありません。したがって、剣の名前と説明を静的フィールドに移動し、静的初期化子から初期化することができます。そして、あなたはデータを準備してコンストラクタで:

import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.Random; 

/** 
* Write a description of class Swords here. 
* 
* @author (your name) 
* @version (a version number or a date) 
*/ 
public class Swords extends Item { 
    private static ArrayList<String> swordNames = new ArrayList(); 
    private static HashMap<String, String> swordDesc = new HashMap<String, String>(); 

    static { 
     generateSwordName(); 
    } 

    // instance variables - replace the example below with your own 
    private int dmg; 

    /** 
    * Constructor for objects of class Swords 
    */ 
    public Swords() { 
     super(getRandomSword(), "asd", 40, 40, "Item"); 
     dmg = generateRandom(2, 50); 
    } 

    public static String getRandomSword() { 
     int swordSize = swordNames.size() - 1; 
     String randomSwords = swordNames.get(generateRandom(0, swordSize)); 
     return randomSwords; 
    } 

    public static int generateRandom(int Start, int End) { 
     int START = Start; 
     int END = End; 
     Random random = new Random(); 
     long range = (long) END - (long) START + 1; 
     long fraction = (long) (range * random.nextDouble()); 
     int randomNumber = (int) (fraction + START); 
     return randomNumber; 
    } 

    public static void generateSwordName() { 
     swordNames.add("Blade of Slimer"); 
     swordDesc.put("Blade of Slimer", 
       new String("Blade of Slimer is a sword forged from the waste of Slimer, surprisingly durable.")); 
     swordNames.add("Thorny Farris"); 
     swordDesc.put("Thorny Farris", new String(
       "A rose thorn was accidently dropped into a bottle of Farris, and a majestic sword emerged from the bottle")); 
     swordNames.add("The Sword of Leah"); 
     swordDesc.put("The Sword of Leah", new String(
       " A sword carried by the Leah family for generations, later given the ability to cut through magic.")); 
     swordNames.add("Grayswandir"); 
     swordDesc.put("Grayswandir", 
       new String("A sword used by Corwin of Amber. Grayswandir is associated with the moon and the night.")); 
     swordNames.add("Werewindle"); 
     swordDesc.put("Werewindle", 
       new String("A sword used by Brand of Amber. Werewindle is associated with the sun and day.")); 
     swordNames.add("Dull Sword"); 
     swordDesc.put("Dull Sword", new String("A dull sword")); 

    } 

    /** 
    * Skriver ut informasjon om itemet. 
    */ 
    public void print() { 
     int minDmg = dmg - 2; 
     int maxDmg = dmg + 2; 
     System.out.println("########################"); 
     System.out.println("# Name of item: " + super.getName()); 
     System.out.println("# Item description: " + super.getDesc()); 
     System.out.println("# Sword damage: " + minDmg + "-" + maxDmg); 
     System.out.println("# Item value: " + super.getValue() + " coins"); 
     System.out.println("# Item weight: " + super.getWeight() + "kg"); 
     System.out.println("########################"); 
    } 
} 

編集

変更この行:

private static ArrayList<String> swordNames = new ArrayList<>(); 

private static ArrayList<String> swordNames = new ArrayList(); 

はチェックを取り除くためにコンパイラの警告。

+0

あなたの提案したようなものを変えました。それは最初のエラーを取り除いたが、今は "C:\ long link \ Swords.javaが未チェックまたは安全でない操作を使用し、-Xlintで再コンパイルする:詳細をチェックしない"というポップアップエラーが発生する。 – Peebl

+0

あなたはそのエラーを受け取りますか? –

+0

私は修正で私の答えを編集しました。 –

0

スーパー( )コンストラクタは、サブクラスコンストラクタから呼び出される最初の行でなければなりません。あなたがそれをさらに持っていても。 super(...)呼び出しが2番目のメソッドであるため、Javaはno-param Super()を自動的に呼び出して、使用可能なSuper()がないことを確認します。コールオーダーを変更してスーパーファーストを呼び出す必要があります。

関連する問題