HashMap z ocenami uczniów i ich średnią

0

Cześć, piszę program, który na podstawie HashMap wyświetli imię ucznia, jego oceny oraz ich średnią.
Zatrzymałem się na etapie pisania metody liczącej średnią, nie wiem czy została napisana poprawnie i mam problem z jej wywołaniem.
A jak ją dodać tak aby liczyła automatycznie średnie ze zmiennych i je wyświetlała.....
Załączam cały kod:

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

class Name
{
private String name;

public String getName()
{
    return name;
}

public void setName(String newName)
{
    name = newName;
}

public Name(String name)
{
    this.name = name;
}

public String toString()
{
    return name;
}

}

class Grades
{
private Integer grade1;
private Integer grade2;
private Integer grade3;
private Integer grade4;
private Integer grade5;

public Integer getGrade1()
{
    return grade1;
}

public Integer getGrade2()
{
    return grade2;
}

public Integer getGrade3()
{
    return grade3;
}

public Integer getGrade4()
{
    return grade4;
}

public Integer getGrade5()
{
    return grade5;
}

public void setGrade1(Integer newGrade1)
{
    grade1 = newGrade1;
}

public void setGrade2(Integer newGrade2)
{
    grade2 = newGrade2;
}

public void setGrade3(Integer newGrade3)
{
    grade3 = newGrade3;
}

public void setGrade4(Integer newGrade4)
{
    grade4 = newGrade4;
}

public void setGrade5(Integer newGrade5)
{
    grade5 = newGrade5;
}

public Grades(Integer grade1, Integer grade2, Integer grade3, Integer grade4, Integer grade5)
{
    this.grade1 = grade1;
    this.grade2 = grade2;
    this.grade3 = grade3;
    this.grade4 = grade4;
    this.grade5 = grade5;
}

public String toString()
{
    return grade1 + " , " + grade2 + " , " + grade3 + " , " + grade4 + " , " + grade5;
}

double five = 5.0;

private double average = (grade1 + grade2 + grade3 + grade4 + grade5) / five;

public double getAverage()
{
    return average;
}

public void setAverage(double newAverage)
{
    average = newAverage;
}

public Grades(double average)
{
    this.average = average;
}

public String averageToString()
{
    return "-->" + average;
}

}

class Main
{
public static void main (String[] args) throws java.lang.Exception
{

    Name name1 = new Name("Kacper");
    Name name2 = new Name("Jacek");
    Name name3 = new Name("Kuba");
    Name name4 = new Name("Michal");
    Name name5 = new Name("Szymon");
    
    Grades firstGrades = new Grades(2, 4, 5, 6, 1);
    Grades secondGrades = new Grades(4, 4, 4, 1, 1);
    Grades thirdGrades = new Grades(5, 6, 4, 5, 3);
    Grades fourthGrades = new Grades(2, 5, 5 ,5, 3);
    Grades fifthGrades = new Grades(1, 1, 1, 4, 3);
    
    
    HashMap<Name, Grades> map = new HashMap<Name, Grades>();
    
    map.put(name1, firstGrades);
    map.put(name2, secondGrades);
    map.put(name3, thirdGrades);
    map.put(name4, fourthGrades);
    map.put(name5, fifthGrades);
    
    for (HashMap.Entry<Name, Grades> entry : map.entrySet())
    {
        System.out.println("Name:  " + entry.getKey() + " Grades:  " + entry.getValue());
    }
}

}

2

Na początek proponuję wywalić wszystko.

Dlaczego odseparowujesz imię studenta od jego ocen?
Stwórz klasę Student, która będzie zawierała imię oraz listę ocen.

3

entry.getValue().getAverage() powinno wywołać metodę.

Lepiej użyć listy do trzymania ocen List<Grade> grades = new ArrayList<>() i zrobić sobie klasę Grade (lub enuma) na ocenę.

Srednia matematyczna to z listy liczb to ich suma dzielona przez ich liczbę, ciężko to skopać.

0

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

class Student
{
private String name;
private int grade1;
private int grade2;
private int grade3;
private int grade4;
private int grade5;
private double average;

public String getName()
{
    return name;
}

public void setName(String newName)
{
    name = newName;
}

public int getGrade1()
{
    return grade1;
}

public int getGrade2()
{
    return grade2;
}

public int getGrade3()
{
    return grade3;
}

public int getGrade4()
{
    return grade4;
}

public int getGrade5()
{
    return grade5;
}

public void setGrade1(int newGrade1)
{
    grade1 = newGrade1;
}

public void setGrade2(int newGrade2)
{
    grade2 = newGrade2;
}

public void setGrade3(int newGrade3)
{
    grade3 = newGrade3;
}

public void setGrade4(int newGrade4)
{
    grade4 = newGrade4;
}

public void setGrade5(int newGrade5)
{
    grade5 = newGrade5;
}

public double getAverage()
{
    average = (grade1 + grade2 + grade3 + grade4 + grade5) / 5.0;
    return average;
}

public Student(String name, int grade1, int grade2, int grade3, int grade4, int grade5, double average)
{
    this.name = name;
    this.grade1 = grade1;
    this.grade2 = grade2;
    this.grade3 = grade3;
    this.grade4 = grade4;
    this.grade5 = grade5;
    this.average = average;
}

public String toString()
{
    return name + "Grades: " + grade1 + " , " + grade2 + " , " + grade3 + " , " + grade4 + " , " + grade5 + average;
}

}

class Main
{
public static void main (String[] args) throws java.lang.Exception
{
Student student1 = new Student("Kacper", 1, 2, 3, 4, 5, average);
}
}

0

Lub coś takiego

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

class Name
{
private String name;

public String getName()
{
    return name;
}

public void setName(String newName)
{
    name = newName;
}

public Name(String name)
{
    this.name = name;
}

public String toString()
{
    return name;
}

}

class Main
{
public static void main (String[] args) throws java.lang.Exception
{
Name name1 = new Name("Kacper");
Name name2 = new Name("Szymon");
Name name3 = new Name("Krzysztof");
Name name4 = new Name("Maciej");

    double totality1 = 0.0;
    double totality2 = 0.0;
    double totality3 = 0.0;
    double totality4 = 0.0;
    double average1;
    double average2;
    double average3;
    double average4;
    
    ArrayList<Integer> grades1 = new ArrayList<Integer>();
    grades1.add(5);
    grades1.add(4);
    grades1.add(3);
    grades1.add(4);
    grades1.add(1);
    
    for (int i = 0; i < grades1.size(); i++)
    {
        totality1 += grades1.get(i);
    }
    
    average1 = totality1 / grades1.size();
    
    ArrayList<Integer> grades2 = new ArrayList<Integer>();
    grades2.add(4);
    grades2.add(4);
    grades2.add(3);
    grades2.add(2);
    grades2.add(1);
    
    for (int i = 0; i < grades2.size(); i++)
    {
        totality2 += grades2.get(i);
    }
    
    average2 = totality2 / grades2.size();
    
    ArrayList<Integer> grades3 = new ArrayList<Integer>();
    grades3.add(3);
    grades3.add(4);
    grades3.add(3);
    grades3.add(4);
    grades3.add(3);
    
    for (int i = 0; i < grades3.size(); i++)
    {
        totality3 += grades3.get(i);
    }
    
    average3 = totality3 / grades3.size();
    
    ArrayList<Integer> grades4 = new ArrayList<Integer>();
    grades4.add(5);
    grades4.add(6);
    grades4.add(3);
    grades4.add(4);
    grades4.add(6);
    
    for (int i = 0; i < grades4.size(); i++)
    {
        totality4 += grades4.get(i);
    }
    
    average4 = totality4 / grades4.size();
    
    Map<Name, ArrayList<Integer>> studentsGrades = new HashMap<>();
    studentsGrades.put(name1, grades1);
    studentsGrades.put(name2, grades2);
    studentsGrades.put(name3, grades3);
    studentsGrades.put(name4, grades4);
    
    ArrayList<Double> averages = new ArrayList<Double>();
    averages.add(average1);
    
    for (Map.Entry<Name, ArrayList<Integer>> studentData : studentsGrades.entrySet()) 
    {
        System.out.println(studentData.getKey() + ", grades: " + studentData.getValue());
    }
   
}

}

0

Cześć, piszę program, który na podstawie HashMap wyświetli imię ucznia, jego oceny oraz ich średnią.

Na razie zajmijmy się głównym problemem: wyświetli imię ucznia, jego oceny oraz ich średnią.

Czyli masz:

  • studenta,
  • oceny
  • przedmiot w ramach jakiego ma ocenę

Student pewnie ma:

  • imię,
  • nazwisko,
  • jakieś id w systemie,

Ocena:

  • no wartość: 2,3,4,5,6
  • komentarz
  • poziom - czyli za co jest: kartktówka, kolos, egzamin, inne
  • w ramach jakiego przedmiotu

Przedmiot:

  • nazwa przedmiotu
  • komentarz
  • lista ocen
  • średnia

Można do problemu podejść tak, że robisz sobie obiekt student, który zawiera listę obiektów przedmioty, każdy z obiektów przedmiot zawiera listę obiektów ocena.

Obliczania średniej itp nie robisz w przedmiocie ani ocenie a w warstwie wyżej, coś ala StudentService. Każde dodanie oceny do studenta może np. wywoływać metody na liczenie średniej i innych tego typu rzeczy. Potem pobranie średniej robisz na zasadzie: StudentService.getStudent(Integer studentId).getItem(Integer itemId).getAvg().

Zbuduj sobie strukturę podobną do tego co napisałem i dopiero potem zacznij bawić się w implementację tego jak będziesz przechowywał te oceny, średnie czy inne.

1

@rydzwr:

Nie rób nigdy czegoś takiego, przenigdy:

private int grade1;
private int grade2;
private int grade3;
private int grade4;
private int grade5;

wrzuć to do listy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1