генерация групп из txt файла и генерация их на основе предпочтений - PullRequest
1 голос
/ 26 апреля 2020

enter image description here Я разрабатываю генератор групп, который принимает такие предпочтения, как «смешать пол», «смешать национальность» ... Я добавляю список имен учеников, за которыми следуют национальность и ген установить, в массиве. Какой самый простой способ создать группы, основанные на пользовательском вводе, это то, что каждая группа состоит из людей разных национальностей или сбалансированного пола.

 public ArrayList<String> readEachWord(String className)
    {
        ArrayList<String> readword = new ArrayList<String>();
        Scanner sc2 = null;
        try {
        sc2 = new Scanner(new File(className + ".txt"));
    } catch (FileNotFoundException e) {

        System.out.println("error, didnt find file");
        e.printStackTrace();  
    }
    while (sc2.hasNextLine()) {
            Scanner s2 = new Scanner(sc2.nextLine());
        while (s2.hasNext()) {
            String s = s2.next();
            readword.add(s);
        }
    }
    return readword;


    }

Я использую это для чтения текстового файла, и на каждом линия, у меня есть имя каждого студента национальности и пола. Я поместил их в ArrayList и сейчас пытаюсь выяснить, как равномерно распределить их на основе номеров групп, желаемых пользователем.

Я использую txt-файл для хранения всей информации, поскольку этот генератор групп является настроены для моей школы.

Ответы [ 2 ]

1 голос
/ 26 апреля 2020

Прежде всего, было бы лучше, если бы вы поместили свой while l oop в блок try, потому что вы не хотите туда попасть, если файл не был найден.

Во-вторых, Вам не нужно создавать новый экземпляр Scanner, чтобы просто прочитать каждую строку. Вы можете просто прочитать файл слово за словом:

while (sc2.hasNext())
    readword.add(sc2.next());

Чтобы сгруппировать студентов по национальности, вы можете сделать что-то вроде этого:

String nationality = [UserInput] ;
List<String> group = new ArrayList<>();
for (int i = 0; i < readword.size(); i++)
    if (readword.get(i + 1).equals(nationality)
        group.add(readword.get(i));
1 голос
/ 26 апреля 2020

Вы можете использовать groupinBy метод

базовый c учебник

import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

class Scratch {
    public static void main(String[] args) {

        String student1 = "Macie American Female";
        String student2 = "Yago Brazilian Male";
        String student3 = "Tom American Male";

        List<String> students = Arrays.asList(student1, student2, student3);

        System.out.println(groupByGender(students));
        System.out.println(groupByNationality(students));
    }

    private static Map<String, List<Student>> groupByNationality(List<String> students) {
        return students.stream().map(s -> mapToStudent(s)).collect(Collectors.groupingBy(Student::getNationality));
    }

    private static Map<String, List<Student>> groupByGender(List<String> students) {
        return students.stream().map(s -> mapToStudent(s)).collect(Collectors.groupingBy(Student::getGender));
    }

    private static Student mapToStudent(String s) {
        String[] ss = s.split(" ");
        Student student = new Student();
        student.setName(ss[0]);
        student.setNationality(ss[1]);
        student.setGender(ss[2]);
        return student;
    }

    private static class Student {
        String name;
        String nationality;
        String gender;

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public String getNationality() {
            return nationality;
        }

        public void setNationality(String nationality) {
            this.nationality = nationality;
        }

        public String getGender() {
            return gender;
        }

        public void setGender(String gender) {
            this.gender = gender;
        }

        @Override
        public String toString() {
            return "Student{" +
                    "name='" + name + '\'' +
                    ", nationality='" + nationality + '\'' +
                    ", gender='" + gender + '\'' +
                    '}';
        }
    }


}
...