“类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("########################");
}
}
答案 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()可用。您需要更改通话顺序并先拨打超级电话。