Использование другого класса в том же пакете, но в отдельном файле

1

Изменение: Последующие рекомендации из комментариев и ответа ниже. Я узнал некоторую полезную информацию и исправил проблему; это была комбинация неправильной компиляции и использования моего имени класса вместо объявления переменной. Код обновляется ниже.


Это мой первый раз, когда я использую пакеты в 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]);
    }
}
  • 0
    Как вы компилируете?
  • 0
    Проблема заключается в следующем: Student[lineSafe] = new Student(); не является действительным утверждением
Показать ещё 2 комментария
Теги:
packages

1 ответ

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 файлах, которые соответствуют имени открытого класса внутри файла.

  • 0
    Хорошо, я сделал это и запустил javac Student.java Advisor.java в моем новом каталоге bookKeeping. Это удалило половину моих ошибок; Тем не менее, я все еще получаю ошибку Cannot Find Symbol для экземпляров с учеником [lineSafe].
  • 0
    @ user3834916 Вы должны запустить команду javac из родительского каталога каталога bookKeeping (см. редактирование).
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню