在同一个包中使用另一个类但是单独的文件

时间:2014-11-25 20:28:47

标签: java packages

编辑:以下评论和答案的建议。我学到了一些有用的信息并修复了问题;它是不正确的编译和使用我的类名而不是它的变量声明的组合。代码在下面更新。


这是我第一次在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]);
    }
}

1 个答案:

答案 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文件中,与文件中的公共类名称匹配。