到目前为止我所写的内容与我目前对数组的了解有关,但我不确定如何创建对象数组。我的目标是读取一个文本文件,其中第一个标记为数组大小,后跟课程编号,部门和标题,然后将它们放入并使用扫描仪创建对象数组。当我编译我的代码时,它说fileScanner可能没有被初始化,所以我想知道什么是错误/我应该如何修复我的代码。任何帮助都会很受欢迎!
import java.util.Scanner;
import java.io.*;
public class Organizer{
public static void main(String[]args){
Scanner fileScanner;
String file;
File f = null;
do{
try{
System.out.print("What is the name of the input file? ");
Scanner inputReader = new Scanner(System.in);
file =inputReader.nextLine();
f = new File(file);
fileScanner = new Scanner(new File(file));
} catch (FileNotFoundException e) {
System.out.println("Error scanning that file, please try again.");
}
} while (!f.exists());
makeArray(fileScanner);
}
public static UniCourse[] makeArray(Scanner s){
int arraySize = s.nextInt();
System.out.println(arraySize);
UniCourse[] myArray = new UniCourse[arraySize];
String title = "";
String dept = "";
int num;
while(s.hasNextLine()){
String oneLine = s.nextLine();
Scanner lineReader = new Scanner(oneLine);
while (lineReader.hasNext()){
dept = lineReader.next();
num = lineReader.nextInt();
while (lineReader.hasNext()){
title = title + lineReader.next();
}
}
lineReader.close();
}
s.close();
return myArray;
}
}
这是我正在使用的课程
public class UniCourse {
//INSTANCE VARIABLES
private String dept = "";
private int num = 0;
private String title = "";
//CONSTRUCTORS
public UniCourse(String dept, int num) {
this.dept = dept;
this.num = num;
}
public UniCourse(String dept, int num, String title) {
this.dept = dept;
this.num = num;
this.title = title;
}
public UniCourse() {
this.dept = "AAA";
this.num = 100;
this.title = "A course";
}
//SETTER AND GETTER METHODS
public void setDept(String dept) {
this.dept = dept;
}
public void setNum(int num) {
this.num = num;
}
public void setTitle(String title) {
this.title = title;
}
public String getDept() {
return this.dept;
}
public int getNum() {
return this.num;
}
public String getTitle() {
return this.title;
}
//TOSTRING METHOD
public String toString() {
return dept + " " + num + ": "+title;
}
}
答案 0 :(得分:0)
将整个makeArray
循环和try
包裹在$ heroku buildpacks:set https://github.com/heroku/heroku-buildpack-multi.git
块中。
编译器发出错误是因为您只在try块之外声明了扫描程序,但实际上是在try块内初始化它。我认为try块中发生的任何事情都被认为在编译期间不存在。
答案 1 :(得分:0)
错误恰好是编译器说的,当你在代码中引入fileScanner时,你还没有初始化它。
尝试:
Scanner fileScanner = null;
答案 2 :(得分:0)
您收到该警告是因为您初始化它的行
fileScanner = new Scanner(new File(file));
可能无法访问,因为可能会抛出FileNotFoundException
。您捕获该异常并继续执行,以到达
makeArray(fileScanner);
您尝试使用它的位置。因此警告!
答案 3 :(得分:0)
编译器抛出错误是因为您正在try块中初始化扫描程序,这不能保证完成,并且可能会捕获异常并在任何时间点发生异常。
因此,您必须在try块之前初始化扫描程序或在try块内添加扫描程序的使用,这样如果在启动扫描程序之前发现错误,则最终不会使用未初始化的宾语。
我建议将make数组方法包装在try块中,正如Joel建议的那样,因为如果文件不存在,你仍无法生成数组。