Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.86/21: Рейтинг темы: голосов - 21, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 26.11.2017
Сообщений: 69
1

Задание на 3 вида сортировки числовых значений из таблицы

25.11.2018, 01:01. Показов 3933. Ответов 38

Author24 — интернет-сервис помощи студентам
Добрый день! Нужна огромнейшая помощь с заданием в институте. Оно следующее:

Есть блокнот (прикрепил), в котором хранится некоторая таблица из 11 столбцов с различными числовыми значениями. Необходимо создать программу из двух классов, которая будет организовывать одну из 3-х видов сортировки по выбранному пользователем столбцу.

В первом классе мейн надо "подключить" таблицу, организовать запрос на сортировку и обращение к функциям из второго класса.

Во втором классе необходимо добавить данные таблицы (как я понял, перенести всю информацию из таблицы в код программы) и реализовать в функциях 3 вида сортировки значений 11-ти столбцов: метод вставки, метод Шелла и блочный метод.

То есть: нужна программа, которая принимает информацию из таблицы блокнота. Пользователь, обращаясь к программе, должен по определенному запросу получить отсортированные значения по каждому из столбцов. Например, программа выводит перечень из названий столбцов (их 11), пользователь выбирает один столбец, значения которого он хочет отсортировать. И программа спрашивает, каким из 3-х способов необходимо отсортировать значения. Пользователь выбирает и получает результат. Входные данные необходимо ограничить значениями типа Int (например, методом hasNextInt() ).

В пример программы для написания кода могу дать: Eclipse Oxygen
Вложения
Тип файла: txt cars.txt (2.0 Кб, 7 просмотров)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.11.2018, 01:01
Ответы с готовыми решениями:

Вывод из столбца таблицы только числовых значений
Добрый день. Может быть вопрос почти элементарный для вас.))) Есть таблица в одну колонку...

Создание таблицы и задание значений по умолч. SQL-запросом
Здравствуйте, уважаемые коллеги. Давно мучает меня такая промблемма: необходимо создать таблицу...

Как скопировать данные из одного вида таблицы в другою иного вида
Добрый день уважаемые гуру! Вопрос в следующем: есть необходимость скопировать данные из таблицы в...

Структура: подсчет максимальных и минимальных значений, сумм и средних значений для числовых полей
Структура должна включать не менее 10 столбцов, в том числе – строковые, числовые и дата, всего в...

38
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
25.11.2018, 08:14 2
что конкретно не ясно?
0
0 / 0 / 0
Регистрация: 26.11.2017
Сообщений: 69
25.11.2018, 08:17  [ТС] 3
Написание кода)
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
25.11.2018, 08:30 4
открываешь идею и пальцами нажимаешь кнопки на клавиатуре
0
0 / 0 / 0
Регистрация: 26.11.2017
Сообщений: 69
25.11.2018, 08:43  [ТС] 5
Если бы была возможность, я на данном ресурсе не выкладывал бы четко расписанное условие задачи. Надо было написать P.S., видимо..
0
2700 / 2013 / 502
Регистрация: 17.02.2014
Сообщений: 9,389
25.11.2018, 10:30 6
Цитата Сообщение от kindastan Посмотреть сообщение
Если бы была возможность
если очень горит, поищи фриансеров...
0
Am I evil? Yes, I am!
Эксперт PythonЭксперт Java
19245 / 10965 / 2919
Регистрация: 21.10.2017
Сообщений: 23,164
25.11.2018, 12:42 7
Цитата Сообщение от kindastan Посмотреть сообщение
нужна программа, которая принимает информацию из таблицы блокнота
Создаешь класс Car, например. С полями, соответствующими твоей таблице. В цикле читаешь файл построчно, бьешь строки split'ом по пробелу, на основе полученных данных создаешь экземпляр Car и складываешь его в лист. Получается список машин со всеми параметрами. Далее уже сортируешь его как в душе угодно...
0
0 / 0 / 0
Регистрация: 26.11.2017
Сообщений: 69
25.11.2018, 12:45  [ТС] 8
А как конкретно осуществлять считывание построчном значений из блокнота? Или надо вручную вбивать все в программный код?
0
Am I evil? Yes, I am!
Эксперт PythonЭксперт Java
19245 / 10965 / 2919
Регистрация: 21.10.2017
Сообщений: 23,164
25.11.2018, 12:50 9
Цитата Сообщение от kindastan Посмотреть сообщение
из блокнота
Начнем с того, что это обыкновенный текстовый файл. Считать с него инфу можно различными способами, вручную делать это, конечно же не следует. Иначе смысла нет. Например
Java
1
2
3
4
5
Scanner scanner = new Scanner(new File("Cars.txt"));
        while (scanner.hasNextLine()){
            String line = scanner.nextLine();
            System.out.println(line);
        }
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
25.11.2018, 12:51 10
https://www.callicoder.com/jav... mmons-csv/
0
0 / 0 / 0
Регистрация: 26.11.2017
Сообщений: 69
25.11.2018, 12:55  [ТС] 11
Вот оно как! Спасибо, буду пытаться выжать что-то из себя) а то я вообще полный 0 в программировании, а закрыть сессию надо �� получается внутри программы будет находится таблицам данными. А как конкретный столбец поместить в одномерный массив, чтобы отсортировать значения? По сути у меня будет 11 одномерных массивов?
0
Am I evil? Yes, I am!
Эксперт PythonЭксперт Java
19245 / 10965 / 2919
Регистрация: 21.10.2017
Сообщений: 23,164
25.11.2018, 13:03 12
Если сделать как я написал, будет 1(!) список машин, которые можно сортировать как угодно.
0
0 / 0 / 0
Регистрация: 26.11.2017
Сообщений: 69
25.11.2018, 19:10  [ТС] 13
Итак, у меня вышло считать всю информацию с файла. Но как теперь занести значения одного столбца в массив для дальнейшей сортировки?

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
 
public class Cars {
 
    // построчное считывание файла
    public static void main(String[] args) {
        try {
            File file = new File("/Users/Стас/Desktop/cars.txt");
            //создаем объект FileReader для объекта File
            FileReader fr = new FileReader(file);
            //создаем BufferedReader с существующего FileReader для построчного считывания
            BufferedReader reader = new BufferedReader(fr);
            // считаем сначала первую строку
            String line = reader.readLine();
            while (line != null) {
                System.out.println(line);
                // считываем остальные строки в цикле
                line = reader.readLine();
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
 
}
0
2700 / 2013 / 502
Регистрация: 17.02.2014
Сообщений: 9,389
25.11.2018, 19:30 14
Цитата Сообщение от kindastan Посмотреть сообщение
// построчное считывание файла
это нужно делать не в классе Cars!
в самом классе Cars, должны быть поля заявленные в "блокноте" (как только люди не обзывают файлы!), а именно:
"mpg" "cyl" "disp" "hp" "drat" "wt" "qsec" "vs" "am" "gear" "carb", с соответствующими типами!
Еще, он класс, должен иметь конструктор, который будет инициализировать эти поля.
0
0 / 0 / 0
Регистрация: 26.11.2017
Сообщений: 69
25.11.2018, 19:34  [ТС] 15
Мне нужно прям пошагово объяснить, как писать программу)) Если не сложно!)

То есть я создаю два класса: в первом я реализую считывание полей из блокнота. А как это правильно сделать? Вот я выше скинул код, он у меня в программе выводит на консоль целиком всю таблицу. А мне как раз надо выделить значения каждого столбца в массив одномерный, который я потом отсортирую по выбору. Что за конструктор?
0
2700 / 2013 / 502
Регистрация: 17.02.2014
Сообщений: 9,389
25.11.2018, 19:38 16
Цитата Сообщение от kindastan Посмотреть сообщение
Что за конструктор?
прости, Бро, но это слишком фундаментальный вопрос, чтобы его тут обсуждать! Он сродни вопросу, "что такое руль, у авто".
0
Am I evil? Yes, I am!
Эксперт PythonЭксперт Java
19245 / 10965 / 2919
Регистрация: 21.10.2017
Сообщений: 23,164
25.11.2018, 21:31 17
Лучший ответ Сообщение было отмечено kindastan как решение

Решение

kindastan, вот, топОрно, конечно, но для общего понимания надеюсь, сойдет...
Main
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package ru.ismoke;
 
public class Cyber {
    public static void main(String[] args) {
 
        CarUtils utils = new CarUtils();
        utils.fillFromFile("cars.txt");
        utils.showAll();
        System.out.println("================================================================");
        utils.sortByModel();
        System.out.println("================================================================");
        utils.sortByCyl();
 
    }
}

Car
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
package ru.ismoke;
 
import lombok.*;
 
@AllArgsConstructor
@Getter @Setter
public class Car {
 
    private String model;
    private double mpg;
    private int cyl;
    private double disp;
    private int hp;
    private double drat;
    private double wt;
    private double qsec;
    private int vs;
    private int am;
    private int gear;
    private int carb;
 
    @Override
    public String toString() {
        return "Car{" +
                "model='" + model + '\'' + ",\t mpg=" + mpg +
                ",\t cyl=" + cyl + ",\t disp=" + disp +
                ",\t hp=" + hp + ",\t drat=" + drat +
                ",\t wt=" + wt + ",\t qsec=" + qsec +
                ",\t vs=" + vs + ",\t am=" + am +
                ",\t gear=" + gear + ",\t carb=" + carb + '}';
    }
}

CarUtils
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
package ru.ismoke;
 
import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;
 
public class CarUtils {
    private List<Car> cars;
 
    public CarUtils() {
        cars = new ArrayList<>();
    }
 
    public void fillFromFile(String path) {
        try (Scanner scanner = new Scanner(new File(path))) {
            scanner.nextLine();
            while (scanner.hasNextLine()) {
                buildAndAddCar(scanner.nextLine());
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
 
    private void buildAndAddCar(String line) {
        String[] values = line.split("\\s+");
 
        String model = values[0];
        double mpg = Double.parseDouble(values[1]);
        int cyl = Integer.parseInt(values[2]);
        double disp = Double.parseDouble(values[3]);
        int hp = Integer.parseInt(values[4]);
        double drat = Double.parseDouble(values[5]);
        double wt = Double.parseDouble(values[6]);
        double qsec = Double.parseDouble(values[7]);
        int vs = Integer.parseInt(values[8]);
        int am = Integer.parseInt(values[9]);
        int gear = Integer.parseInt(values[10]);
        int carb = Integer.parseInt(values[11]);
 
        cars.add(new Car(model, mpg, cyl, disp, hp, drat, wt, qsec, vs, am, gear, carb));
 
    }
 
    public void sortByCyl() {
        cars.stream().sorted(Comparator.comparingInt(Car::getCyl)).forEach(System.out::println);
    }
 
    public void sortByModel() {
        cars.stream().sorted(Comparator.comparing(Car::getModel)).forEach(System.out::println);
    }
 
    public void showAll() {
        cars.forEach(System.out::println);
    }
}


Добавлено через 3 минуты
kindastan, учти, что сортировки здесь ни разу не трех видов
0
0 / 0 / 0
Регистрация: 26.11.2017
Сообщений: 69
25.11.2018, 21:41  [ТС] 18
Начал разбираться с вашим кодом! тут возникли некоторые проблемы (в Eclipse Oxygen)/ Прилагаю фото. Ошибки в трех разных классах. 1 фото: The declared package "ru.ismoke" does not match the expected package ""
2 фото:
The declared package "ru.ismoke" does not match the expected package "" (1 строчка)
AllArgsConstructor cannot be resolved to a type (3 строчка)
AllArgsConstructor cannot be resolved to a type (5, 6 строчки)
3 фото: The constructor Car(String, double, int, double, int, double, double, double, int, int, int, int) is undefined (44 строчка)

Multiple markers at this line
- The method comparingInt(ToIntFunction<? super T>) in the type Comparator is not applicable for the arguments
(Car::getCyl)
- Line breakpoint:CarUtils [line: 49] - sortByCyl()
- The type Car does not define getCyl(T) that is applicable here (49 строчка)


Multiple markers at this line
- The type Car does not define getModel(T) that is applicable here
- The method comparing(Function<? super T,? extends U>) in the type Comparator is not applicable for the arguments
(Car::getModel) (53 строчка)
Миниатюры
Задание на 3 вида сортировки числовых значений из таблицы   Задание на 3 вида сортировки числовых значений из таблицы   Задание на 3 вида сортировки числовых значений из таблицы  

0
Am I evil? Yes, I am!
Эксперт PythonЭксперт Java
19245 / 10965 / 2919
Регистрация: 21.10.2017
Сообщений: 23,164
25.11.2018, 21:50 19
Цитата Сообщение от kindastan Посмотреть сообщение
declared package "ru.ismoke" does not match...
Естественно. Укажи там пакет, в котором классы лежат у тебя
По поводу конструктора, сеттеров и геттеров - каюсь, по привычке использовал lombok

Добавлено через 2 минуты
Т.е. к проекту нужно подключить библиотеку lombok (сорян, но как в эклипсе это делается не знаю) и будет счастье. Или вручную сгенерировать конструктор со всеми аргументами, все геттеры и сеттеры. Ну и удалить над классом Car аннотации ломбока и импорт
0
0 / 0 / 0
Регистрация: 26.11.2017
Сообщений: 69
25.11.2018, 21:52  [ТС] 20
А как указать этот пакет? и что такое Lombok? то есть как-то заменить надо мне?

Добавлено через 1 минуту
А в какой программе вы работали?
0
25.11.2018, 21:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.11.2018, 21:52
Помогаю со студенческими работами здесь

Построить три вида фигуры. На месте вида спереди и вида слева совместить часть вида с частью разреза

Построить три вида фигуры. На месте вида спереди и вида слева совместить часть вида с частью разреза - AutoCAD
Меня уже совсем выносит. Правильно ли я делаю?.. Не могу представить нормально вид слева. Что делаю...

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

Округление числовых значений
А такой вопрос, почему итоги как-то странно считаются, числа вводятся вручную, а дроби в итоге...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru