Премини към съдържанието
  • Добре дошли!

    Добре дошли в нашите форуми, пълни с полезна информация. Имате проблем с компютъра или телефона си? Публикувайте нова тема и ще намерите решение на всичките си проблеми. Общувайте свободно и открийте безброй нови приятели.

    Моля, регистрирайте се за да публикувате тема и да получите пълен достъп до всички функции.

     

Задача на JAVA. Къде греша?


vesi 678
 Сподели

Виж решението Разрешен от Raze,

Препоръчан отговор


Здравейте на всички.

Нуждая се от помощ за тази задача:

 

 

JAVA.png

До момента написах следния код:

public class Students {
    private String specialty;
    private double averagesuccess;

    public Students(String specialty, double averagesuccess) {
        this.specialty = specialty;
        this.averagesuccess = averagesuccess;
    }

    public double getAverageSuccess() {
        return averagesuccess;
    }

    public String getSpecialty() {
        return specialty;
    }

    public void setAverageSuccess(double averagesuccess) {
        this.averagesuccess = averagesuccess;
    }

    public void setSpecialty(String specialty) {
        this.specialty = specialty;
    }
}

 

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map.Entry;
import java.util.Scanner;

public class StudentsMain {

    public static void main(String[] args) {

        Scanner in = new Scanner(System.in);

        HashMap<Integer, Students> map = new HashMap<Integer, Students>();
        int selection = 0;
        while (selection != 6) {
            System.out.println("SELECT: ");
            System.out.println("1.Add Student");
            System.out.println("2.Print everybody Student");
            System.out.println("3.Change Average Success");
            System.out.println("4.Deletes Student");
            System.out.println("5.Print the specialties of which there are students");
            selection = in.nextInt();

            switch (selection) {
            case 1:
                addStudent(map, in);
                break;
            case 2:
                print(map);
                break;
            case 3:
                changeAverageSuccess(map, in);
                break;
            case 4:
                deletesStudent(map, in);
                break;
            case 5:
                printEverybodySpecialty(map, in);
                break;
            }
        }
    }

    // Добавя информация за нов студент:
    public static void addStudent(HashMap<Integer, Students> map, Scanner in) {
        in.nextLine();
        Integer facultyNumber = in.nextInt();
        while (!facultyNumber.equals(6)) {
            if (!map.containsKey(facultyNumber)) {
                String specialty = in.nextLine();
                double averagesuccess = in.nextDouble();
                in.nextLine();
                Students s = new Students(specialty, averagesuccess);
                map.put(facultyNumber, s);
                facultyNumber = in.nextInt();
            } else {
                facultyNumber = in.nextInt();
            }
        }
    }

    // Печата всички студенти (факултетен номер, специалност, среден успех):
    public static void print(HashMap<Integer, Students> map) {
        Iterator<Entry<Integer, Students>> it = map.entrySet().iterator();
        while (it.hasNext()) {
            Entry<Integer, Students> item = it.next();
            Students s = item.getValue();
            System.out.printf("%d - %s%n", item.getKey(), s.getSpecialty(), s.getAverageSuccess());
        }
    }

    // По даден факултетен номер променя средният успех на студента:
    public static void changeAverageSuccess(HashMap<Integer, Students> map, Scanner in) {
        in.nextLine();
        System.out.print("Enter the Faculty Number: ");
        Integer facultyNumber = in.nextInt();
        if (map.containsKey(facultyNumber)) {
            System.out.print("specialty: ");
            String specialty = in.nextLine();
            System.out.print("averagesuccess: ");
            double averagesuccess = in.nextDouble();
            Students s = new Students(specialty, averagesuccess);
            map.put(facultyNumber, s);
        }
    }

    // По даден факултетен номер изтрива информацията за студента:
    public static void deletesStudent(HashMap<Integer, Students> map, Scanner in) {
        in.nextLine();
        System.out.print("Enter the Faculty Number: ");
        Integer facultyNumber = in.nextInt();
        if (map.containsKey(facultyNumber)) {
            map.remove(facultyNumber);
        }
    }

    // Извежда специалностите, от които има студенти:
    public static void printEverybodySpecialty(HashMap<Integer, Students> map, Scanner in) {
        in.nextLine();
        System.out.print("Specialty: ");
        String specialty = in.nextLine();
        Iterator<Entry<Integer, Students>> it = map.entrySet().iterator();
        while (it.hasNext()) {
            Entry<Integer, Students> item = it.next();
            Students s = item.getValue();
            if (s.getSpecialty().equals(specialty)) {
                System.out.printf("%s %n", item.getKey());
            }
        }
    }
}

 

Със сигурност има грешки в кода. Ще се радвам ако ми покажете как да ги поправя.

 

Линк към коментара
Сподели в други сайтове

  • Решение

Нещо такова е според мен:

import java.util.*;
import java.util.Map.Entry;

public class Main {
    private static List<Student> students = new ArrayList<Student>();
    private static Scanner in = new Scanner(System.in);

    public static void main(String[] args) {
        int selection = 0;
        boolean error = false;
        while (!error) {
            System.out.println("SELECT: ");
            System.out.println("1.Add Student");
            System.out.println("2.Print all students");
            System.out.println("3.Change Average Grades for student");
            System.out.println("4.Deletes Student");
            System.out.println("5.Print the specialties for added students");
            selection = in.nextInt();

            switch (selection) {
                case 1:
                    addStudent();
                    break;
                case 2:
                    printStudents();
                    break;
                case 3:
                    changeAverageGrade();
                    break;
                case 4:
                    deletesStudent();
                    break;
                case 5:
                    printSpecialties();
                    break;
                default:
                    System.out.println("Wrong selection!");
                    error = true;
                    break;
            }
        }
    }

    // Добавя информация за нов студент:
    public static void addStudent() {
        Student student = new Student();
        System.out.print("Enter faculty number:");
        int facultyNumber = in.nextInt();
        student.setFacultyNumber(facultyNumber);

        System.out.print("Enter specialty:");
        String specialty = in.next();
        student.setSpecialty(specialty);

        System.out.print("Enter average grade:");
        double averageGrades = in.nextDouble();
        student.setAverageGrades(averageGrades);
        students.add(student);
        System.out.println("Student added.");
    }

    // Печата всички студенти (факултетен номер, специалност, среден успех):
    public static void printStudents() {
        for (Student s: students) {
            System.out.print("Student: ");
            System.out.println(s.toString());
            System.out.println();
        }
    }

    // По даден факултетен номер променя средният успех на студента:
    public static void changeAverageGrade() {
        System.out.print("Enter Faculty Number: ");
        int facultyNumber = in.nextInt();
        for (int i = 0; i < students.size(); i++) {
            if (students.get(i).getFacultyNumber() == facultyNumber) {
                System.out.println("Enter new average grades: ");
                double averageGrades = in.nextDouble();
                Student student = new Student();
                student = students.get(i);
                student.setAverageGrades(averageGrades);
                students.set(i, student);
                System.out.println("Average grades changed.");
                break;
            }
        }
    }

    // По даден факултетен номер изтрива информацията за студента:
    public static void deletesStudent() {
        System.out.print("Enter Faculty Number: ");
        int facultyNumber = in.nextInt();
        for (Student s : students) {
            if (s.getFacultyNumber() == facultyNumber) {
                students.remove(s);
                System.out.println("Student deleted.");
                break;
            }
        }
    }

    // Извежда специалностите, от които има студенти:
    public static void printSpecialties() {
        for (Student s : students) {
            System.out.print("Specialties: " + s.getSpecialty());
        }
    }
}

Последното за извеждане на специалностите не го разбрах какво точно значи 'ако има студенти' - то си ги има или няма данни, извеждам всички специалности.

Линк към коментара
Сподели в други сайтове

Ами....не се бях събудил още :) Метода става така:

Цитат
    // По даден факултетен номер променя средният успех на студента:
    public static void changeAverageGrade() {
        System.out.print("Enter Faculty Number: ");
        int facultyNumber = in.nextInt();
        for (int i = 0; i < students.size(); i++) {
            if (students.get(i).getFacultyNumber() == facultyNumber) {
                System.out.println("Enter new average grades: ");
                double averageGrades = in.nextDouble();
                students.get(i).setAverageGrades(averageGrades);
                System.out.println("Average grades changed.");
                break;
            }
        }
    }

 

 

Линк към коментара
Сподели в други сайтове

Аз не виждам много грешки или нещо подобно, но най-добре си направи unit тестове. Или ако не знаеш как, то най-малкото в notepad за всеки метод си направи тестове с крайни ситуации и след това виж дали в конзолата резултата е същия.

Линк към коментара
Сподели в други сайтове

Добавете отговор

Можете да публикувате отговор сега и да се регистрирате по-късно. Ако имате регистрация, влезте в профила си за да публикувате от него.

Гост
Публикацията ви съдържа термини, които не допускаме! Моля, редактирайте съдържанието си и премахнете подчертаните думи по-долу. Ако замените букви от думата със звездички или друго, за да заобиколите това предупреждение, профилът ви ще бъде блокиран и наказан!
Напишете отговор в тази тема...

×   Вмъкнахте текст, който съдържа форматиране.   Премахни форматирането на текста

  Разрешени са само 75 емотикони.

×   Съдържанието от линка беше вградено автоматично.   Премахни съдържанието и покажи само линк

×   Съдържанието, което сте написали преди беше възстановено..   Изтрий всичко

×   You cannot paste images directly. Upload or insert images from URL.

 Сподели

×
×
  • Добави ново...