Получение оценок из файла

Я создал игру по угадыванию слов, но не могу определить победителя.

Я создаю файл result.txt, содержащий "попытки слов для имени"

затем я читаю этот файл и пытаюсь определить человека с наименьшими попытками.

так например

Mike Keyboard 4
John Monitor 2

Я хочу отобразить Джона как победителя с 2 попытками.

Какой-то код, который я пробовал

     String user = null;
     int min = 0;
     int attempts=0;
     ArrayList<String> players = new ArrayList<>();
     File file = new File("result.txt");

    try (Scanner scan = new Scanner(new File("result.txt"))) {
       while(scan.hasNext()){
         players.add(scan.nextLine());
       }  
       System.out.println(players);
    }

Я знаю, что это не сработало, но я тоже попытался сделать что-то подобное.

     //System.out.println("------------Player List------------");
     /* try {
        Scanner in = new Scanner(new File("result.txt"));
        while(in.hasNext()){
           user = in.next();
           String word = in.next();
           System.out.println(user + " ");
            while (in.hasNextInt())
            {
            attempts = in.nextInt();
            }
            min = Math.min(attempts,min);
            System.out.println("User: "+user+" has " + attempts+ " attempts.");

        attempts = 0;
        }
        in.close();
    }
    catch(IOException ex) {
        ex.printStackTrace();
    }*/
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
36
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете сделать это так, используя Java8,

Path path = Paths.get("src/main/resources", "data.txt");
try (Stream<String> lines = Files.lines(path)) {
    String[] winner = lines.map(l -> l.split(" "))
            .reduce((a1, a2) -> Integer.valueOf(a1[2]) < Integer.valueOf(a2[2]) ? a1 : a2)
            .orElseThrow(IllegalArgumentException::new);
    System.out.println(Arrays.toString(winner));
}

Прочтите каждую строку файла, разделите ее на массив, а затем выполните сокращение в зависимости от количества попыток, оставив одну с минимальным количеством попыток. Затем извлеките из результата то, что вам нужно.

Если у вас несколько победителей, и вы хотите заполучить их всех, шаг сокращения не сработает. Возможно, вам придется собрать их в TreeMap, где ключ - это счет, а значение - это имена игроков с этим счетом. Затем получите первую запись, так как у нее самый низкий балл. Вот код.

TreeMap<Integer, List<String>> winners = lines.map(l -> l.split(" "))
    .collect(Collectors.groupingBy(a -> Integer.valueOf(a[2]), TreeMap::new, 
        Collectors.mapping(a -> a[0], Collectors.toList())));
System.out.println(winners.firstEntry());

если есть два победителя, как я могу включить это в код?

comp 17.11.2018 04:04

Другие вопросы по теме