2 votes

Java : Trouver la moyenne et numéroter les lignes

J'ai essayé de trouver la moyenne de tous les âges dans cet ensemble de données et de numéroter chaque ligne individuelle. Ce que j'ai fait jusqu'à présent n'a fait que rendre le tout incompréhensible. Mes erreurs tournent généralement autour de la conversion et je ne sais pas comment m'en sortir.

J'apprécierais vraiment votre aide !

Contenu du fichier texte :

75 Fresco, Al
67 Dwyer, Barb
55 Turner, Paige
108 Peace, Warren
46 Richman, Mary A.
37 Ware, Crystal
83 Carr, Dusty
15 Sledd, Bob
64 Sutton, Oliver
70 Mellow, Marsha
29 Case, Justin
35 Time, Justin
8 Shorts, Jim
20 Morris, Hugh
25 Vader, Ella
76 Bird, Earl E.

Le code qui fonctionne est le suivant :

import java.io.*;

public class Ex2 {
    public static void main(String[] args) throws FileNotFoundException {
        Scanner input = new Scanner(new File("people.txt"));
        while (input.hasNext()) 
        {
            String[] line = input.nextLine().replace(",", "").split("\\s+");
            String age = line[0];
            String lastName = line[1];
            String firstName = "";
            //take the rest of the input and add it to the last name
            for(int i = 2; 2 < line.length && i < line.length; i++)
                firstName += line[i] + " ";

            System.out.println(firstName + lastName + " " + age);
        }
    }
}

Code que j'ai échoué à utiliser :

import java.io.*;
import java.util.*;

public class Ex2 {
    public static void main(String[] args) throws FileNotFoundException {
        Scanner input = new Scanner(new File("people.txt"));
        while (input.hasNext()) 
        {
            String[] line = input.nextLine().replace(",", "").split("\\s+");
            String age = line[0];
            String lastName = line[1];
            String firstName = "";
            //take the rest of the input and add it to the last name
            for(int i = 2; 2 < line.length && i < line.length; i++)
                firstName += line[i] + " ";

            for (int count = 1; line.length; count++)
                System.out.println((count+1)+ " " + line[count] + firstName + lastName + " " + age);

            int sum = 0;
            for (int j = 0; j < line.length; j++)
                sum = sum + line[j]
                        double average = sum / line.length;
            System.out.println();
            System.out.println("The average age is: " + average);
        }
    }
}

Avec une sortie de :

Al Fresco 75
Barb Dwyer 67
Paige Turner 55
Warren Peace 108
Mary A. Richman 46
Crystal Ware 37
Dusty Carr 83
Bob Sledd 15
Oliver Sutton 64
Marsha Mellow 70
Justin Case 29
Justin Time 35
Jim Shorts 8
Hugh Morris 20
Ella Vader 25
Earl E. Bird 76

Avec un objectif de production de :

1. Al Fresco 75
2. Barb Dwyer 67
3. Paige Turner 55
4. Warren Peace 108
5. Mary A. Richman 46
...

The average age is: NUMBER

1voto

Narrim Points 485

Oh mon Dieu, il y a tellement de façons de gérer cela.

Tout d'abord, en Java, nous essayons de considérer les choses comme des objets ; dans ce cas, chaque ligne est en fait un objet. Pour permettre au code d'être étendu et ajusté plus tard, commencez avec un cadre non

Nous avons donc un nouveau

Public Person(
    private int age;
    private String lastName;
    private Sring firstName;

    Public Person(int age, String lName, String fName){
       this.age = age;
       this.lastName = lname;
       this.firstName = fName;
    }
   //add getters here.
)

Donc maintenant nous avons un objet nous pouvons créer une fonction qui fait

Array<Person> people = new ArrayList<>;

...pour la boucle...

String[] line = input.nextLine().replace(",", "").split("\\s+");
Person p = new Person(Integer.parseint(line[0]],line[1],line[2])
people.add(p);

... Vous pouvez également utiliser une carte ...

Map<Integer,Person> people = new ListMap<>;

... alors faire people.add(p.getAge(),p) .... Les cartes peuvent effectuer toutes sortes de tris et de filtrages, en fonction du type de carte que vous choisissez d'utiliser.

Enfin, vous pouvez ensuite travailler sur votre objet pour atteindre l'objectif ci-dessus :

Integer total = 0
int i = 0
foreach(Person p: people){
   Integer total = total + p.getAge();
   i++
   System.out.Println(i + "." + p.getFirst() +" "+ p.getLast()+" "+ p.getAge())
}
Float average = Float.parseInt(total) / i;
System.out.Println("The average age is " + average);

0voto

Coder Points 456

Vous pouvez utiliser le code suivant. J'ai fait quelques modifications pour pouvoir calculer la moyenne. Il n'est pas nécessaire d'utiliser des boucles for supplémentaires à l'intérieur de la boucle while. Vous pouvez calculer l'âge moyen en définissant deux variables temporaires( count y totalAge ). Ensuite, pendant la boucle, l'application peut augmenter le nombre pour identifier le nombre de personnes et dans la même boucle, vous pouvez ajouter l'âge dans la variable totalAge. (Notez que l'âge doit être converti en double). Ensuite, une fois la boucle terminée, vous pouvez obtenir l'âge en divisant totalAge par le nombre.

J'ai remarqué que dans votre code, une section d'impression moyenne a été ajoutée à l'intérieur de la boucle while. C'est incorrect, elle devrait être en dehors de la boucle while. Sinon votre programme imprimera la ligne moyenne après chaque ligne.

Parcourez le code suivant, j'ai ajouté des commentaires en ligne là où j'ai effectué les modifications.

import java.io.*;
import java.util.Scanner;

public class Ex2 {
public static void main(String[] args) throws FileNotFoundException {
    Scanner input = new Scanner(new File("people.txt"));
    // to get number of people
    int count=0;
    //to get total age
    double totalAge=0;
    while (input.hasNext()) 
    {
        String[] line = input.nextLine().replace(",", "").split("\\s+");
        String age = line[0];
        String lastName = line[1];
        String firstName = "";
        //take the rest of the input and add it to the last name
        for(int i = 2; 2 < line.length && i < line.length; i++)
            firstName += line[i] + " ";

        //Convert age string into double and add it to totalAge
        totalAge=totalAge+Double.parseDouble(age);
        System.out.println(++count+" "+firstName + lastName + " " + age);
    }
    double average = totalAge / count;
    System.out.println("The average age is: " + average);
}
}

Vous pouvez obtenir la sortie suivante pour votre fichier d'entrée donné.

1 Al Fresco 75
2 Barb Dwyer 67
3 Paige Turner 55
4 Warren Peace 108
5 Mary A. Richman 46
6 Crystal Ware 37
7 Dusty Carr 83
8 Bob Sledd 15
9 Oliver Sutton 64
10 Marsha Mellow 70
11 Justin Case 29
12 Justin Time 35
13 Jim Shorts 8
14 Hugh Morris 20
15 Ella Vader 25
16 Earl E. Bird 76
The average age is: 50.8125

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X