【发布时间】:2012-05-24 20:07:33
【问题描述】:
package macroreader;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class MacroReader {
public static Macro[] macroArray = new Macro[20];
public static int macroID;
public static BufferedReader br;
public static void main(String[] args) throws IOException {
br = new BufferedReader(new FileReader("Macros.txt"));
String currentLine;
while((currentLine = br.readLine()) != null) {
if(currentLine.equalsIgnoreCase("#newmacro")) {
br.mark(1000);
createMacro();
br.reset();
}
}
if (br != null) {
br.close();
}
}
public static void createMacro() throws IOException {
String currentLine;
macroID = getEmptyMacro();
while((currentLine = br.readLine()) != null && !currentLine.equalsIgnoreCase("#newmacro")) {
macroArray[macroID].readMacro(currentLine);
}
macroArray[macroID].inUse = true;
macroArray[macroID].printData();
}
public static int getEmptyMacro() {
for(int i = 0; i < macroArray.length; i++) {
if(!macroArray[i].inUse) {
return i;
}
}
return 0;
}
}
不是将从文件读取器读取的值分配给数组中的指定对象,在本例中为“macroID”,而是将值分配给数组中的所有对象
现在只是在整个文件中进行了编辑,但问题在于 createMacro() void
这是我的宏类
package macroreader;
public class Macro {
public static String key;
public static String[] commands = new String[20];
public static boolean inUse;
public static void readMacro(String input) {
if (!input.equals("")) {
if (input.startsWith("key = ")) {
key = input.substring(6);
System.out.println("Key Value for Macro set to " + key);
} else {
for (int i = 0; i < commands.length; i++) {
if (commands[i] == null) {
commands[i] = input;
System.out.println("Command [" + input + "] assigned");
break;
}
}
}
}
}
public static void printData() {
System.out.println("Macro Key: " + key);
for(int i = 0; i < commands.length; i++) {
if(commands[i] != null) {
System.out.println(commands[i]);
}
}
}
}
【问题讨论】:
-
macroArray持有什么数据类型,又是如何定义的?我不擅长猜测。 --- 难道inUse是static? -
public static Macro[] macroArray = new Macro[20];
-
您显示的代码不可能运行到那个点,因为您正在创建一个新数组而没有初始化其内容,因此在尝试访问
inUse字段时您将得到一个NullPointerException. (我自己进行了测试以确保。)请显示您正在使用的实际代码。您不必包含所有内容 - 只需包含与macroArray一起使用的所有代码。 -
啊,它是静态的,所以你实际上不需要任何实例(也没有任何实例)。
标签: java arrays bufferedreader