java - 在代码 Java 中的正确位置将数组设置为 null

标签 java arrays class methods

我的代码工作正常,唯一的问题是我的输出不正确,因为我找不到正确的位置将数字数组设置回零。该程序的基础是接收包含相应成绩的姓名的数据。我的输出应遵循以下标准:

        Alice [87, 99, 96, 99, 86, 96, 77, 95, 70, 88]
            Name:    Alice
            Length:  10
            Average: 89.30
            Median:  91.5
            Maximum: 99
            Mininum: 70

我得到的第一个人的结果是正确的,但是,后面的结果是不正确的,因为它们包含为每个人读入的所有值。因此,当我的代码对该人的数组执行操作时,下一个人将拥有“爱丽丝”的成绩加上他们自己的成绩。我有两个程序,第一个是主程序,读取数据并调用方法进行打印和操作。第二个是包含执行操作的所有方法的类。 这是主程序:

    public class Lab2 {

public static void main(String[] args) {

    Scanner in = null; //initialize scanner
    ArrayList<Integer> gradeList = new ArrayList<Integer>(); //initialize gradeList

     //grab data from data.txt 
    try {
        in = new Scanner(new File("data.txt"));
    } catch (FileNotFoundException exception) {
        System.err.println("failed to open data.txt");
        System.exit(1);
    }
    //while loop to grab tokens from data
    while (in.hasNext()) {
        String studentName = in.next();   //name is the first token
        while (in.hasNextInt()) {   //while loop to grab all integer tokens after name
            int grade = in.nextInt();   //grade is next integer token
            gradeList.add(grade);       //adding every grade to gradeList
        }

      //grab all grades in gradeList and put them in an array to work with
        int[] sgrades = new int[gradeList.size()];
        for (int index = 0; index < gradeList.size(); index++) {
            sgrades[index] = gradeList.get(index);  //grade in gradeList put into grades array 
        }

        Grades myGrade = new Grades(studentName,sgrades);
        testGrades(myGrade);
        sgrades = null;


    }


}

public static void testGrades(Grades grades) {
    System.out.println(grades.toString()); 
    System.out.printf("\tName:    %s\n", grades.getName());
    System.out.printf("\tLength:  %d\n", grades.length());
    System.out.printf("\tAverage: %.2f\n", grades.average());
    System.out.printf("\tMedian:  %.1f\n", grades.median());
    System.out.printf("\tMaximum: %d\n", grades.maximum());
    System.out.printf("\tMininum: %d\n", grades.minimum());
    grades = null;
}

      }

我尝试添加位置以通过将其设置为空来删除下一个人的数组值。我在这方面运气不佳。

这是下一个程序,其中包含方法。

    public class Grades {

private String studentName; // name of course this GradeBook represents
private int[] grades; // array of student grades

/**
 * @param studentName The name of the student.
 * @param grades The grades for the student.
 */

public Grades(String name, int[] sgrades) {
    studentName = name; // initialize courseName
    grades = sgrades; // store grades
} // end two-argument GradeBook constructor

/**
 * Method to convert array to a string and print.
 * 
 * @return The name of the student with array of grades.
 */
public String toString() {

    return (String) studentName + " " + Arrays.toString(grades);

}

/**
 * One-argument constructor initializes studentName.
 * The grades array is null.
 * 
 * @param name The name of the student.
 */

public Grades(String name) {
    studentName = name; // initialize courseName
} // end one-argument Grades constructor

/**
 * Method to set the student name.
 * 
 * @return The name of the student.
 */
public String getName() {
    return studentName;
} // end method getCourseName

/**
 * Method to set the length of the amount of grades.
 * 
 * @return Number of grades for student.
 */
public int length() {
    return grades.length; 
}

/**
 * Determine average grade for grades.
 * 
 * @return the average of the grades.
 */
public double average()     {      
    double total = 0; // initialize total
    double average = 0.0;
    // sum grades for one student, while loop
    int index = 0;
    while (index < grades.length) {
        int grade = grades[index];  // get grade at index
        total += grade;
        index++;                    // need to increment
    }
    average = total / grades.length;
    // return average of grades
    return (double) average;
} // end method getAverage


/**
 * Determine median grade for grades.
 * 
 * @return the median of the grades.
 */
public double median()      {

    Arrays.sort(grades);    //sort grades array
    double median = 0.0; 
    if (grades.length%2 == 0) //checks to see if amount of grades is even/odd
        //this is median if list of grades is even
        median = ((double)grades[grades.length/2-1] + (double)grades[grades.length/2])/2;
    else
        //this is median if list of grades is odd
        median = (double) grades[grades.length/2];

    return (double) median;
}

/**
 * Find minimum grade.
 * 
 * @return the minimum grade.
 */
public int minimum() { 
    int lowGrade = grades[0]; // assume grades[0] is smallest

    // loop through grades array, for loop
    for (int index = 0; index < grades.length; index++) {
        int grade = grades[index]; // get grade at index
        // if grade lower than lowGrade, assign it to lowGrade
        if (grade < lowGrade)
            lowGrade = grade; // new lowest grade
    } // end for

    return lowGrade; // return lowest grade
} // end method getMinimum

/**
 * Find maximum grade.
 * 
 * @return the maximum grade.
 */
public int maximum() { 
    int highGrade = grades[0]; // assume grades[0] is largest

    // loop through grades array, for-each loop
    for (int grade : grades) {
        // if grade greater than highGrade, assign it to highGrade
        if (grade > highGrade)
            highGrade = grade; // new highest grade
    } // end for

    return highGrade; // return highest grade
} // end method getMaximum

      }

我的主要问题是,如何为我读入的每个新学生“刷新”数组?

最佳答案

您正在寻找gradeList.clear()。但为什么要将 gradeList 中的所有内容复制到 sgrades 呢?看起来有点多余。

关于java - 在代码 Java 中的正确位置将数组设置为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18840129/

相关文章:

java - 我在代码中是否正确使用了 'this' 关键字?

javascript - 无法为 JavaScript 中的对象变量赋值

javascript - 在从第一个表返回的条件或返回从 foreach 派生的数组中返回空对象值的位置上进行 Sequelize 连接

C++ : Understanding implicit typecasting for classes with a constructor with 1 argument

CSS:class 和 id 可以互换吗?

java - 注解 String[] oneArr();与 String[][] twoArr();声明

java.lang.NoSuchMethodError : org. apache.log4j.Logger 错误

php - 加载后对 Magento 集合进行排序

Python,如何在一个大类下创建特定的类

java - 我只是无法让这个java代码工作