编辑:以下评论和答案的建议。我学到了一些有用的信息并修复了问题;它是不正确的编译和使用我的类名而不是它的变量声明的组合。代码在下面更新。
这是我第一次在java中使用包,这让我很困惑。我完全迷失了;如何从另一个文件中定义的类创建对象?我一直在搜索溢出和其他来源,但没有任何帮助我。
这是我迄今为止最好的尝试(大部分代码都被遗漏了):但是,在Advisor.java中,我的编译器说找不到符号(学生)或者(学生[])它提到的每个实例都是虽然我在Student.java中明确定义了学生。我在Student.java中的构造函数必须是公共的。
Student.java
package bookKeeping;
import java.util.GregorianCalendar;
import java.text.SimpleDateFormat;
import java.text.ParseException;
import java.util.Calendar;
import java.util.Scanner;
import java.util.Date;
final class Majors {
public static String[] majors = null;
}
public final class Student {
private static String fName;
private static String mName;
private static String lName;
private static String classYear;
private static String major;
private static String ID;
public Student() {
this.fName = "First_Name";
this.mName = "";
this.lName = "Last_Name";
this.classYear = "00/0000";
this.major = "Undefined";
this.ID = "0000-0000";
}
public static String ToString() {
}
public static String SetNames(String name) {
}
public static String SetID(String id) {
}
public static String SetMajor(String m) {
}
public static String SetClassYear(String date) {
}
}
Advisor.java
package bookKeeping;
import bookKeeping.Student;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
class Construct {
public static String[] names(String fileName) {
String[] studentInfo = null;
Student[] studentName = null;
BufferedReader reader = null;
int a = 0, position = 0, lineSafe = 0;
try {
String line;
reader = new BufferedReader(new FileReader(new File(fileName)));
System.out.println("\nThis program assumes MM/dd/YYYY and MM/YYYY");
line = reader.readLine();
a = Integer.parseInt(line);
studentInfo = new String[a];
studentName = new Student[a];
studentName[lineSafe] = new Student();
while ((line = reader.readLine()) != null) {
String kappa = null;
switch (position) {
case 0: kappa = studentName[lineSafe].SetNames(line);
break;
case 1: kappa = studentName[lineSafe].SetID(line);
break;
case 2: kappa = studentName[lineSafe].SetMajor(line);
break;
case 3: kappa = studentName[lineSafe].SetClassYear(line);
break;
}
if (kappa != null) {
System.out.println(kappa);
System.exit(0);
}
if (position == 3) {
position = 0;
studentInfo[lineSafe] = studentName[lineSafe].ToString();
studentName[++lineSafe] = new Student();
} else {
position++;
}
}
} catch (IOException e1) {
System.out.println("\nIOEXCEPTION\n");
System.exit(0);
} finally {
try {
reader.close();
} catch (IOException e2) {
e2.printStackTrace();
}
}
return studentInfo;
}
}
public class Advisor {
public static void main(String[] args) {
if (args.length != 1) {
System.out.println("\nError: Files missing from Command Line\n");
System.exit(0);
}
String[] studentInfo = Construct.names(args[0]);
}
}
答案 0 :(得分:0)
首先,Advisor.java
中存在语法问题:您正在将类Student
编入索引,就好像它是一个数组Student[lineSafe]
,但它不是一个数组。我认为您打算使用studentInfo
数组(并使其成为Student[] studentInfo
而不是String[] studentInfo
; studentNames
也应该成为String
s的数组
不要忘记将new Student[MAX_STUDENT]
分配给studentInfo
以避免运行时错误。
完成语法后,创建一个特定的文件结构,以便进行编译:
bookKeeping
Student.java
移至bookKeeping
Advisor.java
移至bookKeeping
bookKeeping
的父文件夹,然后运行javac
在Windows上,您可以像这样运行编译器:
javac bookKeeping\Student.java
(在UNIX和Mac上你可以反转反斜杠)。
您需要执行此操作,因为javac
假定每个包的java文件放在与该包名对应的文件夹中,在.java
文件中,与文件中的公共类名称匹配。