Я делаю игру или планирую ее создать, где использование имеет непосредственный контроль над некоторым кодом игры, для максимальной настройки. В любом случае, я планирую, что мой код будет читать собственный файл, скопировать себя в новый файл, поместить в новый код, а затем скомпилировать и запустить новый код.Self-Changer (Java)
Вот мой код:
import java.io.*;
import java.util.*;
public class Iteration1 {
public static int n = 1;
private static int one = 0;
public static void main(String[] args) throws Exception {
one++;
iterate();
runNext();
}
public static void iterate() throws IOException {
File f = new File("Iteration" + (n + one) + ".java");
if(!f.createNewFile()) {
f.delete();
f.createNewFile();
}
Scanner s = new Scanner(new File("Iteration" + n + ".java"));
PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(f.getName(),true)));
int ln = one;
while(s.hasNext()) {
if(ln == (one + one + one + one + one + one)) {
pw.println("\n" + getCode());
}
pw.println(s.nextLine().replaceAll(n+"",(n + one)+""));
ln++;
}
pw.flush();
}
public static String getCode() {
Scanner s = new Scanner(System.in);
System.out.println("Enter in additional code:");
String code = "";
String temp = s.nextLine();
while(!temp.equals("//done")) {
code += "\t" + temp;
temp = s.nextLine();
}
code.replaceAll(n+"", (n + one)+"");
return code;
}
public static void runNext() {
try {
Process compile = Runtime.getRuntime().exec("javac Iteration" + (n + one) + ".java");
compile.waitFor();
System.out.println("Compiled");
Process execute = Runtime.getRuntime().exec("java Iteration" + (n + one));
execute.waitFor();
System.out.println("Ran");
} catch (Exception ie) {
System.out.println("Error!");
}
}
}
Основная проблема у меня в том, что мой код иногда работает, или прекращает принимать входные данные, или что-то еще. Я не могу понять, почему, но я решил проблему с выполнением. Он никогда не распечатывает «Ran» или не запрашивает вход во второй раз.
Кто-нибудь знает, почему это может быть?
'if (ln == (one + one + one + one + one + one))' ... um what? Это легко худший код, который я прочитал через некоторое время ... – redFIVE
'private static int one = 0;' ... 'one ++;' - что? – immibis
Возможно, вам стоит сосредоточиться на освоении абсолютных основ Java, прежде чем пытаться что-то сделать ... «амбициозным». – redFIVE