2016-09-29 68 views
0

「構造函數類Item中的Item不能應用於給定的類型;
必需:java.lang.String,java.lang.String,int,int,java.lang .String;找到;沒有參數;原因:實際和正式論證列表長度不同「構造函數Item類中的Item不能應用於給定的類型

是我的完整錯誤消息,我試圖讓一個方法從arraylist給我一個隨機劍名稱時調用。

爲了簡單起見我粘貼類代碼爲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

不習慣張貼在這裏,我認爲一個pastebin會更加方便。我的壞 – 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(...)調用是第二種方法,因此Java會嘗試自動爲您調用no-param Super(),並且看到沒有Super()可用。您需要更改呼叫順序並優先呼叫超級。

相關問題