Zephyr
Zephyr

Reputation: 1

How to get specific values in an array and output an average?

I'm having trouble trying to figure out what exactly needs to be done in this scenario for the code to work properly. I need to output a text file containing a name and the average of a list of values on each line, the text files contains these things:

Carol,35.00,67.00,13.00
Steve,14.00,82.00,41.00,66.00
Sharon,56.00,42.00,28.00,70.00
Roy,80.00,105.00,55.00
Beatrice,20.00

How do I output the average for each line in this scenario? The code below is an example of a more simpler one with each line only containing one value, I just don't know how to modify the array list or the code to get the values I want.

    import java.util.Scanner;
    import java.io.File;
    import java.util.ArrayList;

    public class AvgCalc {

        public static void main(String[] args) {
            
            File myFile = new File("C:\\Users\\Byoma\\Downloads\\Assignment1.txt");
            
            try {
                
                Scanner myScanner = new Scanner(myFile);
                
                while (myScanner.hasNextLine()) {
                    String line = myScanner.nextLine();
                    
                    String[] tokens = line.split(",");
                    String name = tokens[0];
                    String average = tokens [1];
                    System.out.println("Name: " + name + ", Average: " + average);
                }
                
                myScanner.close();
            }
            
            catch (Exception e) {
                System.out.println("Error reading file: " + myFile.getAbsolutePath());
            }
        }
    }

Upvotes: 0

Views: 67

Answers (2)

Brett
Brett

Reputation: 51

Assuming that each of the people that you listed for an example is on a separate line in the text file, adding a for loop to your current code and changing a few lines will solve this for you.

import java.util.Scanner;
import java.io.File;
import java.util.ArrayList;

public class test {

    public static void main(String[] args) {

        File myFile = new File("C:\\Users\\Byoma\\Downloads\\Assignment1.txt");

        try {

            Scanner myScanner = new Scanner(myFile);

            while (myScanner.hasNextLine()) {
                String line = myScanner.nextLine();

                String[] tokens = line.split(",");
                String name = tokens[0];
                double sum = 0; //Initialized a double to sum the values
                for (int i = 1; i < tokens.length; i++) {
                    sum += Double.parseDouble(tokens[i]); //Parse the values in the text document as doubles
                }
                double average = sum / (tokens.length - 1); //Get the average by dividing the sum by the number of values
                System.out.println("Name: " + name + ", Average: " + average);
            }

            myScanner.close();
        }

        catch (Exception e) {
            System.out.println("Error reading file: " + myFile.getAbsolutePath());
        }
    }
}

Upvotes: 1

JustAnotherDeveloper
JustAnotherDeveloper

Reputation: 2266

You iterate through the elements of the array starting with element 1 and accumulate them, then divide the total sum of the elements by the number of elements (note that I used int for the accumulated sum, but you can use floats or doubles if your input is not integer values, and that you don't strictly need the count variable):

public class MyClass {
    public static void main(String args[]) {
        String[] array = {"Name", "11", "5", "107"};
        int accumulated = 0; //this will hold the sum of all the numbers
        int count = 0; //we use this to keep track of how many numbers we have
        for (int i = 1; i < array.length; i++) {
            //add the numbers, we convert them to int since they are strings
            accumulated = accumulated + Integer.parseInt(array[i]); 
            count++;
        }  
        System.out.println("Total sum: "+accumulated);
        System.out.println("Number of elements: "+count);
        float average = accumulated/count;
        System.out.println("Average: "+average);
    }
}

Output:

Total sum: 123
Number of elements: 3
Average: 41.0

Upvotes: 0

Related Questions