Изменение: Последующие рекомендации из комментариев и ответа ниже. Я узнал некоторую полезную информацию и исправил проблему; это была комбинация неправильной компиляции и использования моего имени класса вместо объявления переменной. Код обновляется ниже.
Это мой первый раз, когда я использую пакеты в java, и это меня пугает. Я полностью потерян; как я могу создать объект из класса, определенного в другом файле? Я искал переполнение и другие источники, но пока ничего не помогло.
Это моя лучшая попытка до сих пор (большая часть кода отсутствует): Однако в Advisor.java мой компилятор говорит, что не может найти Symbol (Student) OR (Student []). Каждый экземпляр, о котором он упомянул, хотя я четко определил ученика в Student.Ява. Мой конструктор в 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]);
}
}
Во-первых, проблема с синтаксисом в 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
файлах, которые соответствуют имени открытого класса внутри файла.
javac
из родительского каталога каталога bookKeeping
(см. редактирование).
Student[lineSafe] = new Student();
не является действительным утверждением