Как получить данные, которые уже присутствуют в файле input.txt, и найти самую высокую зарплату с именем Департамента, используя карту в java? - PullRequest
0 голосов
/ 04 февраля 2020

Зарплата новейшего сотрудника отдела

В этой задаче вам необходимо изменить существующую программу Java, которая считывает некоторые данные о сотрудниках и обрабатывает их.

Входные данные считываются из файла с именем input.txt в следующем формате:

22, Rajan Anand, Engineering, 1600000
23, Swati Patil, Testing, 800000
27, Vijay Chawda, Engineering, 800000
29, Basant Mahapatra, Engineering, 600000
32, Ajay Patel, Testing, 350000
34, Swaraj Birla, Testing, 350000

Каждая строка состоит из 4 полей: «Идентификатор сотрудника», «Имя», «Отдел», и "Зарплата". Здесь «Идентификатор сотрудника» и «Зарплата» являются целыми числами, а «Имя» и «Отдел» - это строки, которые не содержат запятые или переводы строк.

В настоящее время существующая программа считывает ввод и создает массив Строка из строк ввода. Затем он вызывает метод processData для этого массива и печатает возвращенные данные в выходной файл. К сожалению, в настоящее время processData не делает ничего полезного - он просто возвращает пустую карту.

Вам необходимо изменить зарплату processData для сотрудника, который имеет самый высокий идентификатор сотрудника в этом отделе (поскольку он представляет нового сотрудника для присоединиться к этому отделу). В частности, processData должен возвращать Map, где каждый ключ - это название отдела, а значение - зарплата сотрудника в этом отделе, который имеет самый высокий идентификатор сотрудника.

Если ваша программа запускается с вводом приведенный выше, он должен выдать такой результат:

Engineering: 600000
Testing: 350000

Это потому, что у Басанта Махапатры самый высокий ID сотрудника (29) в Инженерном отделе и его зарплата 600000, а у Свараджа Бирла самый высокий ID сотрудника ( 34) в отделе тестирования, и его зарплата составляет 350000.

Пожалуйста, убедитесь в следующем:

• Все ваши изменения должны быть в методе processData. Не вносите никаких изменений в остальную часть программы

• Убедитесь, что processData возвращает правильное значение

• Не добавляйте объявление пакета и не изменяйте имя класса.

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

/* DO NOT CHANGE ANYTHING ABOVE THIS LINE */
/* You may add any imports here, if you wish, but only from the 
   standard library */

/* Do not add a namespace declaration */
public class Main {
    public static Map<String,Integer> processData(ArrayList<String> array) {
        /* 
         * Modify this method to process `array` as indicated
         * in the question. At the end, return a Map containing
         * the appropriate values
         *
         * Please create appropriate classes, and use appropriate
         * data structures as necessary.
         *
         * Do not print anything in this method.
         *
         * Submit this entire program (not just this method)
         * as your answer
         */
        Map<String,Integer> retVal = new Map<String,Integer>();
       return retVal;
    }

    public static void main (String[] args) {
        ArrayList<String> inputData = new ArrayList<String>();
        String line;
        try {
            Scanner in = new Scanner(new BufferedReader(new FileReader("input.txt")));
            while(in.hasNextLine())
                inputData.add(in.nextLine());
            Map<String,Integer> retVal = processData(inputData);
            PrintWriter output = new PrintWriter(new BufferedWriter(new FileWriter("output.txt")));
            for(Map.Entry<String,Integer> e: retVal.entrySet())
                output.println(e.getKey() + ": " + e.getValue());
            output.close();
        } catch (IOException e) {
            System.out.println("IO error in input.txt or output.txt");
        }
    }
}
...