In: Computer Science
Complete the program to read in values from a text file. The values will be the scores on several assignments by the students in a class. Each row of values represents a specific student's scores. Each column represents the scores of all students on a specific assignment. So a specific value is a specific student's score on a specific assignment. The first two values in the text file will give the number of students (number of rows) and the number of assignments (number of columns), respectively. You may assume that all values in the file will be integers.
For example, if the file contains:
3
4
9 6 10 5
2 2 0 0
10 10 9 10
then it represents the scores for 3 students on 4 assignments as follows:
Assignment 1 | Assignment 2 | Assignment 3 | Assignment 4 | |
Student 1 | 9 | 6 | 10 | 5 |
Student 2 | 2 | 2 | 0 | 0 |
Student 3 | 10 | 10 | 9 | 10 |
The program should:
1) Read in the first two values, two integers, to get the number of students and number of assignments. Create a two-dimensional array of integers to store all the scores using these dimensions.
2) Read in all the scores into the 2-D array.
3) Print the whole array, row by row on separate lines, using Arrays.toString() on each row of the array
3) Print the average of the scores on each assignment, rounded to 1 decimal place. For example, if the data is given in the above example, the output would be:
Array of scores:
[9, 6, 10, 5]
[2, 2, 0, 0]
[10, 10, 9, 10]
Average score of each assignment:
Assignment #1 Average = 7.0
Assignment #2 Average = 6.0
Assignment #3 Average = 6.3
Assignment #4 Average = 5.0
This is what I have so far:
import java.util.*;
import java.io.File;
import java.io.*;
public class Scores {
public static void main(String[] args) throws FileNotFoundException
{
Scanner scnr = new Scanner(System.in);
System.out.println("What is the name of the file containing the
scores?");
String file = scnr.nextLine();
Scanner fileScan = new Scanner(new File(file));
int rows = Integer.parseInt(fileScan.nextLine());
int col = Integer.parseInt(fileScan.nextLine());
int[][] scores = new int[rows][col];
int i = 0;
while (fileScan.hasNext()) {
String line = fileScan.nextLine();
String[] strArray = line.split(" ");
for (int c = 0; c < strArray.length; c++) {
scores[i][c] = Integer.parseInt(strArray[c]);
}
i++;
}
System.out.println("Array of scores:");
for (int c = 0; c < rows; c++) {
for (int j = 0; j < col; j++) {
System.out.print(scores[c][j] + " ");
}
System.out.println();
}
System.out.println("Average score of each assignment:");
for (int c = 0; c < col; c++) {
int sum = 0;
for (int j = 0; j < rows; j++) {
sum = sum + scores[j][c];
}
System.out.println("Assignment #" + (c + 1) + " Average = " + (sum
/ 3));
}
}
}
But I keep getting errors similar to this:
What is the name of the file containing the scores? | |
Exception in thread "main" java.lang.NumberFormatException: For input string: "" | |
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) | |
at java.lang.Integer.parseInt(Integer.java:592) | |
at java.lang.Integer.parseInt(Integer.java:615) | |
at Scores.main(Scores.java:12) |
PROGRAM CODE
import java.text.DecimalFormat;
import java.util.*;
import java.io.File;
import java.io.*;
public class Scores {
public static void main(String[] args) throws FileNotFoundException {
Scanner scnr = new Scanner(System.in);
System.out.println("What is the name of the file containing the
scores?");
String file = scnr.nextLine();
Scanner fileScan = new Scanner(new File(file));
// Reading number of rows (number of students) and columns
(number of assignments)
// Just use fileScan.nextInt() to get int instead of using
Integer.parseInt(fileScan.nextLine())
int rows = fileScan.nextInt();
int col = fileScan.nextInt();
int[][] scores = new int[rows][col]; // Declaring 2D array to store scores
// Using nested-for loop to read all assignment marks into 2D array
for (int i=0; i<rows; i++) {
for (int j=0; j<col; j++) {
scores[i][j] = fileScan.nextInt();
}
}
System.out.println("Array of scores:");
for (int c = 0; c < rows; c++) {
// Printing each row using Arrays.toString
System.out.println(Arrays.toString(scores[c]));
}
System.out.println("Average score of each assignment:");
for (int c = 0; c < col; c++) {
int sum = 0;
for (int j = 0; j < rows; j++) {
sum = sum + scores[j][c];
}
// Declaring variable for average
double avg = sum / 3.0;
System.out.println("Assignment #" + (c + 1) + " Average = " +
new DecimalFormat("0.0").format(avg)); // formatting to 1 decimal
place
}
}
}
score.txt
3
4
9 6 10 5
2 2 0 0
10 10 9 10
SAMPLE OUTPUT
---------------------------------------------------------------------------------------------------------
COMMENT DOWN FOR ANY QUESTIONS...........
HIT A THUMBS UP IF YOU DO LIKE IT!!!