I am finding the sum of multiple arrays and have searched various codes and programs but it seems none has worked for me or should I say none has actually made my brain work to create a code based on what I saw. "What I am trying to do is to add the 3 inputed Grade Arrays and then divide it by 3 to get the Array for Average."
package Activity;
import java.util.*;
public class TestCode {
static Scanner sc = new Scanner(System.in);
static int indexMax = 3;
public static void main(String[] args) {
String InfoName[][] = new String[indexMax][2];
Double InfoGrade[][] = new Double[indexMax][3];
InputInfoName(InfoName);
InputGrade(InfoGrade);
PrintInfo(InfoName, ComputeAvg);
}
public static String[][] InputInfoName(String NameArr[][]) {
for (int i = 0; i < indexMax; i++) {
System.out.println();
System.out.println("Enter Student[" + (i + 1) + "]'s Full Name");
System.out.println();
System.out.print("First Name: ");
NameArr[i][0] = sc.nextLine();
System.out.print("Last Name: ");
NameArr[i][1] = sc.nextLine();
}
return NameArr;
}
public static Double[][] InputGrade(Double GradeArr[][]) {
for (int i = 0; i < indexMax; i++) {
System.out.println();
System.out.println("Enter Student[" + (i + 1) + "]'s Grades");
System.out.println();
System.out.print("1st Grade: ");
GradeArr[i][2] = sc.nextDouble();
System.out.print("2nd Grade: ");
GradeArr[i][3] = sc.nextDouble();
System.out.print("3rd Grade: ");
GradeArr[i][4] = sc.nextDouble();
}
return GradeArr;
}
// Main Problem
public static Double[][] ComputeAvg(Double ComputeArr[][]) {
Double AddAvg[][] = new Double[indexMax][];
Double getAvg[][] = new Double[indexMax][];
for (int i = 0; i < indexMax; i++) {
AddAvg[i][] = // I don't know what is next
}
return ComputeArr;
}
// End of Main Problem
public static void PrintInfo(String arr[][], Double ComputeAvg[]) {
System.out.println("");
System.out.println("Student Info");
for (int i = 0; i < arr.length; i++) {
System.out.println("Student[" + i + "]: " + arr[i][0] + "," + arr[i][1] + " Average: " + ComputeAvg[i]);
}
}
}
Side-note Personally, I would replace the use of the Double
object by the primitive-type double
, mainly because of (apart from performance) readability and because in your code is not really needed.
Create the array that will keep the average by array:
Double AddAvg[] = new Double[indexMax];
iterate through the arrays and get the average of those arrays using Java streams:
Arrays.stream(ComputeArr[i])
.mapToDouble(Double::doubleValue)
.average()
.orElse(0);
The full method:
public static Double[] ComputeAvg(Double[][] ComputeArr) {
Double[] AddAvg = new Double[indexMax];
for (int i = 0; i < indexMax; i++) {
AddAvg[i] = Arrays.stream(ComputeArr[i])
.mapToDouble(Double::doubleValue)
.average()
.orElse(0);
}
return AddAvg;
}
If you cannot use streams then do the sum manually:
public static Double[] ComputeAvg(Double[][] ComputeArr) {
Double[] AddAvg = new Double[3];
for (int i = 0; i < 3; i++) {
double sum = 0.0;
for(int j = 0; j < ComputeArr[i].length; j++) {
sum += ComputeArr[i][j];
}
AddAvg[i] = sum / ComputeArr[i].length;
}
return AddAvg;
}
In Java arrays indexed from 0 to the size of the array -1. So this method:
public static Double[][] InputGrade(Double GradeArr[][]) {
for (int i = 0; i < indexMax; i++) {
System.out.println();
System.out.println("Enter Student[" + (i + 1) + "]'s Grades");
System.out.println();
System.out.print("1st Grade: ");
GradeArr[i][2] = sc.nextDouble();
System.out.print("2nd Grade: ");
GradeArr[i][3] = sc.nextDouble();
System.out.print("3rd Grade: ");
GradeArr[i][4] = sc.nextDouble();
}
return GradeArr;
}
is accessing positions outside the boundaries of the array GradeArr
(i.e., GradeArr[i][4]
). Change to :
public static Double[][] InputGrade(Double GradeArr[][]) {
for (int i = 0; i < indexMax; i++) {
System.out.println();
System.out.println("Enter Student[" + (i + 1) + "]'s Grades");
System.out.println();
System.out.print("1st Grade: ");
GradeArr[i][0] = sc.nextDouble();
System.out.print("2nd Grade: ");
GradeArr[i][1] = sc.nextDouble();
System.out.print("3rd Grade: ");
GradeArr[i][2] = sc.nextDouble();
}
return GradeArr;
}
Collected from the Internet
Please contact [email protected] to delete if infringement.
Comments