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);
}

10-08 13:40