gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 14:21:30 25 4
gpt4 key购买 nike

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

<小时/>

这是我第一次在java中使用包,这让我很困惑。我彻底迷失了;如何从另一个文件中定义的类创建对象?我一直在搜索溢出和其他来源,但还没有任何帮助。

这是我迄今为止最好的尝试(大部分代码被省略):但是,在 Advisor.java 中,我的编译器说找不到 Symbol (Student) OR (Student[]) 每个实例,即使我明确定义Student.java 中的学生。我在 Student.java 中的构造函数必须是公共(public)的。

学生.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) {
}
}

顾问.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 数组)。

不要忘记将 new Student[MAX_STUDENT] 分配给 studentInfo 以避免运行时错误。

完成语法后,创建一个特定的文件结构以便编译:

  • 创建一个名为 bookKeeping 的文件夹
  • Student.java 移动到 bookKeeping
  • Advisor.java 移至 bookKeeping
  • 进入bookKeeping的父文件夹,并运行javac

在 Windows 上,您可以像这样运行编译器:

javac bookKeeping\Student.java

(在 UNIX 和 Mac 上,您可以反转反斜杠)。

您需要执行此操作,因为 javac 假定每个包的 java 文件都放置在与该包名称对应的文件夹中,以及与名称匹配的 .java 文件中文件内的公共(public)类。

关于java - 在同一包中但单独的文件中使用另一个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27136080/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com