Java Array Constructor - Gradebook

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • harry1982
    New Member
    • Aug 2013
    • 1

    Java Array Constructor - Gradebook

    What needs to be modified in StudentManager class so that it uses constructor instead of the following lines.

    gradeBook[i].setFirstName(f Name);
    gradeBook[i].setLastName(lN ame);
    gradeBook[i].setTestScores( tstScores);


    StudentManager. java


    Code:
    import java.io.*;
    import java.util.*;
    
    public class StudentManager
    {
        public static void main(String[] args) throws FileNotFoundException
        {
            Tests[] gradeBook = new Tests[10];
    
            String fName, lName;
            double[] tstScores = new double[5];
    
            double classAverage = 0.0;
    
            Scanner inFile =
    		              new Scanner(new FileReader("StudentData.txt"));
    
    		for (int i = 0; i < 10; i++)
    		    gradeBook[i] = new Tests();
    
            for (int i = 0; i < 10; i++)
            {
    			fName = inFile.next();
    			lName = inFile.next();
    
                for (int j = 0; j < 5; j++)
                    tstScores[j] = inFile.nextDouble();
    
                gradeBook[i].setFirstName(fName);
                gradeBook[i].setLastName(lName);
                gradeBook[i].setTestScores(tstScores);
    		}
    
            System.out.println("First_Name  Last_Name     Test1  Test2  "
                              + "Test3  Test4  Test5   Average Grade");
    
    		for (int i = 0; i < 10; i++)
    		{
    		    System.out.println(gradeBook[i]);
    
    		    classAverage = classAverage + gradeBook[i].getAverage();
    		}
    
    		classAverage = classAverage / 10;
    
    		System.out.println();
    
    		System.out.printf("Class average = %.2f%n", classAverage);
        }//end main
    }
    Tests.java

    Code:
    public class Tests
    {
    	private final int numberOfTests = 5;
    
        private String firstName;
        private String lastName;
        private double[] testScores;
        private double average;
        private char grade;
    
        Tests()
        {
            firstName = "";
            lastName = "";
            testScores = new double[numberOfTests];
            average = 0.0;
            grade = '*';
        }
    
        Tests(String fName, String lName, double[] ts)
        {
            firstName = fName;
            lastName = lName;
            testScores = new double[numberOfTests];
            for (int i = 0; i < numberOfTests; i++)
                testScores[i] = ts[i];
            average = getAverage();
            grade = getGrade();
        }
    
        public void setFirstName(String fName)
        {
            firstName = fName;
        }
    
        public void setLastName(String lName)
        {
            lastName = lName;
        }
    
        public String getFirstName()
        {
            return firstName;
        }
    
        public String getLastName()
        {
            return lastName;
        }
    
        public void setTestScores(double[] ts)
        {
            for (int i = 0; i < numberOfTests; i++)
                testScores[i] = ts[i];
        }
    
        public void setTestScr(double scr, int index)
        {
            if (0 <= index && index < numberOfTests)
                testScores[index] = scr;
            else
                System.out.println("Invalid array index.");
        }
    
        public double getTestScr(int index)
        {
            if (0 <= index && index < numberOfTests)
                return testScores[index];
            else
            {
                System.out.println("Invalid array index.");
    
                return -1.0;
    		}
        }
    
        private void calculateAverage()
        {
    		for (int i = 0; i < numberOfTests; i++)
                average = average + testScores[i];
    
            average = average / 5;
    	}
    
        public double getAverage()
        {
    		average = 0.0;
    
    		calculateAverage();
    
            return average;
        }
    
        private void calculateGrade()
        {
    		double avg = getAverage();
    
            if (avg >= 90.00)
                grade =  'A';
            else if (avg >= 80.00)
                grade =  'B';
            else if (avg >= 70.00)
                grade =  'C';
            else if (avg > 60.00)
                grade =  'D';
            else
                grade =  'F';
        }
    
        public char getGrade()
        {
    		calculateGrade();
    		return grade;
    	}
    
        public String toString()
        {
    		average = 0.0;
    
    		calculateAverage();
    		char grade = getGrade();
    
    		String scoreString = "";
    
    		for (int i = 0; i < numberOfTests; i++)
    		    scoreString = scoreString + String.format("%7.2f", testScores[i]);
    
            return String.format("%-11s %-11s %35s %7.2f %5c", firstName,
                                 lastName, scoreString, average, grade);
        }
    }
  • Nepomuk
    Recognized Expert Specialist
    • Aug 2007
    • 3111

    #2
    In line 19 of StudentManager. java you call the constructor Tests(); you would have to replace this with Tests(a, b, c) where a, b and c are the arguments you want to pass.
    Now, currently you don't get the arguments until after the Test objects have been created so you'll have to switch the order here. So move the lines
    Code:
    fName = inFile.next();
    lName = inFile.next();
     
    for (int j = 0; j < 5; j++)
        tstScores[j] = inFile.nextDouble();
    to before the constructor.

    Comment

    Working...