import java.io.*;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class Probability {
public static void main(String[] args)throws FileNotFoundException {
String fileName;
Scanner input = new Scanner(System.in);
System.out.println("Please enter the file name: ");
fileName = input.nextLine();
System.out.println("How many students do you have listed in the file?");
int numStudents = input.nextInt();
input.close();
Student[] students = new Student[numStudents];
//readStudents(students, numStudents, fileName);
// calls the readStudents method
//Student myStudent = new Student(name, gpa);
//System.out.println(myStudent);
// creates and prints an object of the Student class
for(int i = 0; i < students.length; i++){
System.out.println("students [" + i + "] = " + students[i]);
} // for
} // main
public static void readStudents(Student[] students, int numStudents, String fileName)throws FileNotFoundException {
Scanner fin = new Scanner(new File(fileName));
while(fin.hasNext()){
String name = fin.next();
double gpa = fin.nextDouble();
students[0] = new Student(name, gpa);
} // while
fin.close();
} // readStudents
} // class
我正在尝试从以下数据文件中读取:datafile.txt
艾米3.5
史蒂文3.2
奥斯卡3.8
提姆2.7
安2.1
吉米3.9
我也在使用这个程序:
public class Student {
private String name;
private double gpa;
public Student(String name, double gpa){
this.name = name;
this.gpa = gpa;
} //Student
public String getName(){
return name;
}
public double getGPA(){
return gpa;
}
public void setName(){
this.name = name;
}
public void setGPA(){
this.gpa = gpa;
}
public String toString(){
return("The student's name is " + name + "\n" + "The student's grade point average is " + gpa);
}
} //class
可以看到我尝试过
//readStudents(students, numStudents, fileName);
和Student myStudent = new Student(name, gpa);
System.out.println(myStudent);
但是两者都没有。
当我尝试
//readStudents(students, numStudents, fileName);
时,这是我收到的错误消息:Exception in thread "main" java.io.FileNotFoundException: datafile (The system cannot find the file specified)
at java.base/java.io.FileInputStream.open0(Native Method)
at java.base/java.io.FileInputStream.open(FileInputStream.java:220)
at java.base/java.io.FileInputStream.<init>(FileInputStream.java:158)
at java.base/java.util.Scanner.<init>(Scanner.java:639)
at Probability.readStudents(Probability.java:44)
at Probability.main(Probability.java:29)
当我尝试
Student myStudent = new Student(name, gpa);
System.out.println(myStudent);
这是我收到的错误消息:
Probability.java:32: error: cannot find symbol
Student myStudent = new Student(name, gpa);
^
symbol: variable name
location: class Probability
Probability.java:32: error: cannot find symbol
Student myStudent = new Student(name, gpa);
^
symbol: variable gpa
location: class Probability
2 errors
这是我的教授要我完成的工作:
实现具有以下属性的名为“ Student”的类:
名称:字符串类型
gpa:双倍型
以及以下方法:
一个构造器
Student(String name, double gpa)
每个属性的获取器和设置器
toString()
:在屏幕上打印类的属性(每行一个属性)使用以下方法在一个单独的类中编写一个main方法:
public static void readStudents(Student[] students, int numStudents, String fileName)
:接受学生数据文件的名称,并在文件中返回包含学生的一维数组。主要方法应:
询问用户有多少学生(1分)和数据文件的名称,然后调用readStudents从数据文件中获取学生列表。
显示阵列。
最佳答案
好的,由于您尝试打开的文件没有正确的文件路径,因此可能未找到文件异常。您正在尝试打开“ datafile.txt”,但是它在目录结构中的什么位置?如果它位于您项目的根目录,则表示“ ./datafile.txt”(即在当前目录中查找datafile.txt)的“ datafile.txt”将起作用。
但是,假设您在项目的根目录中有一个名为“ data”的文件夹,而datafile.txt在此文件夹中。现在要打开此文件,您需要从项目根目录开始的相对路径,即“ data / datafile.txt”(与“ ./data/datafile.txt”相同)。
名称和gpa的其他错误“找不到符号”是由于您尚未在Student构造函数中的main中定义变量名称和gpa而导致的。您将需要以下内容:
String name = "the_name_you_want";
double gpa = 4.0;
在您的构造函数能够使用name和gpa之前。
您也可以这样调用构造函数:
Student a = new Student("a", 4.0);
或者,如果提供默认的Student构造函数,则可以在默认的Student对象上设置这些成员:
将默认学生构造函数添加到您的学生班级,即
public Student(){}
^^请注意,这是当前构造函数的补充,该函数受称为构造函数重载的功能的支持。
现在,您可以像这样的学生:
Student a = new Student();
a.name = "a";
a.gpa = 4.0;
还:您的readStudents循环只会给您一个学生数组,因为您只给新学生设置了array [0]。尝试以下方法:
int i = 0;
while (fin.hasNext()) {
String name = fin.next();
double gpa = fin.nextDouble();
students[i++] = new Student(name, gpa);
}