2014-11-25 4 views
1

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

Это мой первый раз, когда я использовал пакеты в java, и это меня сбивает с толку. Я полностью потерян; как я могу создать объект из класса, определенного в другом файле? Я искал переполнение и другие источники, но пока ничего не помогло.

Это моя лучшая попытка до сих пор (большая часть кода не указана): Однако в Advisor.java мой компилятор говорит, что не может найти Symbol (Student) ИЛИ (Student []). Каждый экземпляр упоминается, хотя я ясно определенный ученик в 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

Проблема заключается в следующем: 'Student [lineSafe] = new Student();' не является допустимым оператором –

+0

Я просто пытался скомпилировать каждый отдельно (например, javac Student.java и javac Advisor.java). Дайте мне знать, если вы знаете, как это правильно скомпилировать! Хорошо, я пойму, почему это неправильно. Спасибо. – user3834916

ответ

0

Во-первых, существует проблема синтаксиса в Advisor.java: вы индексировать класс Student, как если бы это был массив Student[lineSafe], но это не массив. Я думаю, вы хотели использовать массив studentInfo для этого (и сделать его Student[] studentInfo вместо String[] studentInfo; studentNames должен стать массивом String s, тоже).

Не забудьте назначить new Student[MAX_STUDENT] на номер studentInfo, чтобы избежать ошибок времени выполнения.

После того, как вы закончите с синтаксисом, создать определенную файловую структуру для того, чтобы это скомпилировать:

  • Создайте папку bookKeeping
  • Move Student.java в bookKeeping
  • Move Advisor.java в bookKeeping
  • Перейдите в родительскую папку bookKeeping и запустите javac

В Windows вы запустите компилятор так:

javac bookKeeping\Student.java 

(на UNIX и Mac вы реверс обратной косой черты).

Вам необходимо сделать это, потому что javac предполагает, что файлы java для каждого пакета помещаются в папки, соответствующие этому имени пакета, в файлах .java, которые соответствуют имени открытого класса внутри файла.

+0

Хорошо, я сделал это и запустил javac Student.java Advisor.java в моем новом каталоге bookKeeping.Это удалило половину моих ошибок; однако, я все еще получаю ошибку «Не могу найти символ для экземпляров со Student [lineSafe]». – user3834916

+0

@ user3834916 Вы должны запустить команду 'javac' из родительского каталога' bookKeeping' (см. Редактирование). – dasblinkenlight

+0

Итак, я в родительской папке, и я запустил: «javac bookKeeping \ Student.java», а затем запустил «javac bookKeeping \ Advisor.java». Это дает тот же результат, что и при запуске «javac Student.java Advisor.java» IN bookKeeping после успешного компиляции Student.java. По-прежнему я получаю Symbol не найденные ошибки при компиляции Advisor.java. О, я не умный, я не использовал имена студентов для каждого из моих объектов, поэтому он недействителен. См. Комментарий RC выше. – user3834916

Смежные вопросы