Ich kann das Verzeichnis der Datei abrufen/erstellen, aber Probleme beim Zurückgeben des richtigen Datentyps.Ein Spiel in Java programmieren. Ich muss Klassen-Dateien aus einem verwandten Verzeichnis lesen und ein Objekt aus diesen
public fighter rndmFighter(int z) throws Exception
{
File here = new File("encounter.java");
String path = here.getAbsolutePath();
path = path.substring(0,path.lastIndexOf("/"));
path +="/Zones/"+z+"/enemy";
File zone = new File(path);
File[] items = zone.listFiles();
int r = (int)(Math.random()*(items.length));
fighter t = items[r].getName();
return t;
}
erstellt das Verzeichnis ./Zones/(an ganze Zahl wie 1)/(random) .class- aber ich habe keine Ahnung, wie in den Informationen für den Zugriff auf das Verzeichnis (Vergangenheit so etwas wie ein Textdokument)
Beispiel einer bestandene Klassendatei
public class imp extends fighter implements monster {
private String name = "";
public imp(int health, int attack, int amr) {
super("imp", health, attack, amr);
randomName();
setGoldVal(4);
setDodge(15);
exp(3);
}
public imp() {
super("imp", (10 + (int) (Math.random() * 10)), 4 + (int) (Math.random() * 2), 0);
randomName();
setGoldVal((int) (Math.random() * 5));
setDodge(10 + (int) (Math.random() * 10));
exp(expVal());
}
public void Name(String n) {
n = name;
}
public void randomName() {
int x = (int) (Math.random() * 5);
switch (x) {
case 1:
name = "Zoryap";
break;
case 2:
name = "Yazkin";
break;
case 3:
name = "Azbis";
break;
case 4:
name = "Quzlop";
break;
case 5:
name = "Ziltik";
break;
default:
name = "Taylor Rogers";
break;
}
}
public int expVal() {
return 1 + (int) (Math.random() * 4);
}
public String toString() {
if (HP() < 0)
return name + ", the deceased imp.";
return name + super.toString();
}
}
die Klassendateien auf diese Weise erstellt werden muß, und es muss eine zufällige Datei aus dem Verzeichnis zurückkehrt, ist dies ein Klasse-Projekt, wo andere Menschen zu b haben Ich bin in der Lage, ihre eigenen Klassen zu erstellen und sie zu meinem Code hinzuzufügen, und ich möchte nicht, dass Leute meine Quelldateien ändern müssen.
Ja, alle Dateien, auf die ich zugreifen möchte, sind kompiliert.
aktuelle Version von rndmFighter()
public Object rndmFighter(int z)throws Exception
{
File here = new File("encounter.java");
String path = here.getAbsolutePath();
path = path.substring(0,path.lastIndexOf("/"));
path +="/Zones/"+z+"/enemy";
File zone = new File(path);
File[] items = zone.listFiles();
int r = (int)(Math.random()*(items.length));
path+="/"+items[r].getName();
ClassLoader classLoader = ClassLoader.getSystemClassLoader();
Class myClass = classLoader.loadClass(path);
Object t = myClass.newInstance();
return t;
}
das Problem dabei ist, dass es ClassNotFoundException im Läufer (gleiches Verzeichnis wie die Begegnung Klasse) gibt
Exception in thread "main" java.lang.ClassNotFoundException: /home/user/Documents/Text Adventure/Zones/1/enemy/imp.class
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at encounter.rndmFighter(encounter.java:30)
at testGame.main(testGame.java:12)
mit der Linie
fighter e = fighter.class.cast(t.rndmFighter(1));
zu ac verlasse die Methode.
Namenskonventionen bitte: PascalCase für Klassennamen verwenden. – bcsb1001
Was ist der Zweck von hier? Warum nicht einfach 'new File (". ")'? – BevynQ
Ich muss in der Lage sein, mit Kämpfer-Objekten innerhalb des Verzeichnisses _/home/user/Dokumente/Text Adventure/Zonen/1/Feind/class file_ aus dem Verzeichnis _/home/user/Dokumente/Text Adventure_ – xcannibalrabbit