2016-09-29 5 views
0

"constructor Item in der Klasse Item kann nicht auf gegebene Typen angewendet werden;
erforderlich: java.lang.String, java.land.String, int, int, java.lang .String; found; keine Argumente; Grund: Tatsächliche und formelle Argumentlisten unterscheiden sich in der Länge "Konstruktor Item in der Klasse Item kann nicht auf gegebene Typen angewendet werden

Ist meine vollständige Fehlermeldung, ich versuche, eine Methode zu erhalten, um mir einen zufälligen Schwertnamen aus einer Arraylist zu nennen.

Zur Vereinfachung i klebte die Klassencodes in 2 verschiedenen Pastebins:
Class Swords
Class Item
edit: Code ...

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-Klasse:

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

Nicht gewohnt, hier zu posten, ich dachte, eine Pastebin wäre viel praktischer. Meine schlechte – Peebl

+0

keine Sorgen ... danke für das Posten des Codes in Ihrer Frage. – brso05

Antwort

1

Nichts von deinem Code in Bezug auf die verschiedenen Schwertnamen ist speziell für eine bestimmte Schwertinstanz. So können Sie die Schwertnamen und -beschreibungen in statische Felder verschieben und sie von einem statischen Initialisierer initialisieren. Dann im Konstruktor haben Sie die Daten bereit:

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

bearbeiten:

Änderung dieser Zeile:

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

zu

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

loswerden der ungeprüften Compilerwarnung.

+0

Ich habe die Dinge so verändert, wie Sie es vorgeschlagen haben. Es entfernte den anfänglichen Fehler, aber jetzt bekomme ich einen Popup-Fehler, der sagt "Warnung von letzter Kompilation - C: \ long link \ Swords.java verwendet ungeprüfte oder unsichere Operationen, kompiliere mit -Xlint: unchecked für Details" – Peebl

+0

in welcher Zeile Bekommst du diesen Fehler? –

+0

Ich habe meine Antwort mit dem Fix bearbeitet. –

0

Der Super () Konstruktor muss die erste Zeile sein, die von einem Unterklassenkonstruktor aufgerufen wird. Auch wenn du es weiter unten hast. Da der Aufruf von super (...) die zweite Methode ist, wird Java versuchen, einen no-param Super() automatisch für Sie aufzurufen und sieht, dass kein Super() verfügbar ist. Sie müssen die Anrufreihenfolge ändern und Super zuerst anrufen.

Verwandte Themen