类Item中的构造函数项不能应用于给定类型

时间:2016-09-29 13:47:04

标签: java arraylist compiler-errors hashmap

“类Item中的构造函数Item不能应用于给定类型;
  required:java.lang.String,java.land.String,int,int,java.lang.String;发现;没有争论;理由:实际和正式论证列表的长度不同“

是我的完整错误消息,我正在尝试获取一种方法,在调用时从一个arraylist中给我一个随机的剑名。

为简单起见,我将类代码粘贴到2个不同的粘贴文件中:
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("########################");
    }
}

项目类:

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("########################");
    }
}

2 个答案:

答案 0 :(得分: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<>();

删除未经检查的编译器警告。

答案 1 :(得分:0)

Super()构造函数必须是从子类构造函数调用的第一行。即使你进一步下降。由于super(...)调用是第二种方法,Java会尝试自动调用no-param Super()并发现没有Super()可用。您需要更改通话顺序并先拨打超级电话。