static String[][] parseCSV(String fileName) throws FileNotFoundException, IOException {
int fields;
int lines;
try (BufferedReader br = new BufferedReader(new FileReader("C:\\Users\\hp\\Documents\\Documents\\ID3ALGORITHM\\playtennis.txt"))) {
String s = br.readLine();
fields = 1;
int index = 0;
while ((index = s.indexOf(',', index) + 1) > 0)
fields++;
lines = 1;
while (br.readLine() != null)
lines++;
}
String[][] data = new String[lines][fields];
Scanner sc = new Scanner(new File("C:\\Users\\hp\\Documents\\Documents\\ID3ALGORITHM\\playtennis2.txt"));
sc.useDelimiter("[,\n]");
for (int l = 0; l < lines; l++)
for (int f = 0; f < fields; f++)
if (sc.hasNext())
data[l][f] = sc.next();
else
error("Scan error in " + "playtennis2.txt" + " at " + l + ":" + f);
sc.close();
return data;
}
public static void main(String[] args) throws FileNotFoundException,IOException {
if (args.length != 2)
error("Expected 2 arguments: file names of training and test data");
String[][] trainingData = parseCSV(args[0]);
String[][] testData = parseCSV(args[1]);
ID3ALGO classifier = new ID3ALGO();
classifier.train(trainingData);
classifier.printTree();
classifier.classify(testData);
}
收到错误信息。期待2个参数:训练和测试数据的文件名。
为什么会出现这样的情况?参数的 parseCSV
由同一文件夹中的两个不同文件组成,系统无法读取该文件。
你提到的错误是由主方法的长度引起的。String[] args
一直小于2。
如果你自己写了这个程序,你就会意识到文件路径是由命令行传入主方法的。
我给你举个简单的例子。
简单的Application.java文件。
public class Application{
public static void main(String[] args){
if(args.length == 2) {
System.out.println("2 args received");
}
System.out.println(args[0]);
System.out.println(args[1]);
}
}
javac Application.java
java Application /root/dir1/dir2/file.txt /root/dir1/dir2/file2.txt
arg[0]
现在是rootdir1dir2file.txt。arg[1]
现在是rootdir1dir2file.txt。产出:
2 args received
/root/dir1/dir2/file.txt
/root/dir1/dir2/file2.txt