Не сортируются числа в массиве и неверно рассчитывается время

Рейтинг: -2Ответов: 1Опубликовано: 26.07.2023

Есть следующее задание:
Создайте класс с именем StopWatch для представления секундомера.

Класс StopWatch должен содержать:

  • Скрытые поля данных startTime и endTime с getter-методами.
  • Безаргументный конструктор, который инициализирует startTime с текущим временем.
  • Метод с именем start(), который сбрасывает startTime до текущего времени.
  • Метод с именем stop(), который присваивает endTime текущее время.
  • Метод с именем getElapsedTime(), который возвращает прошедшее время на секундомере в миллисекундах.

Нарисуйте UML-диаграмму класса StopWatch, а затем реализуйте этот класс. Напишите клиент этого класса — программу, которая вычисляет время выполнения сортировки 100 000 чисел методом выбора.

2 проблемы:

  1. не сортируется массив;
  2. не похоже что время считается верно…

Вот код:

import static java.lang.System.currentTimeMillis;
import java.util.Arrays;

public class StopWatch {

    /* поля данных */
    private static long startTime;
    private static long endTime;

    /* Метод main */
    public static void main (String[] args) {
        StopWatch time = new StopWatch();

        int[] list = new int [100000];

        for (int i = 0; i < list.length - 1; i++) {
            list[i] = (int) (Math.random() * 100000);

        }
    /* Сортировка массива */
        Arrays.sort(list);
        System.out.println("\n Сортировка массива: ");
        for (int num : list) {
            System.out.print(num + " ");
        }
        time.stop();
        System.out.println("\n Время прошло в миллисекундах " + time.getElapsedTime());

    }

    /* Безаргументный конструктор, который инициализирует startTime с текущим временем */

    StopWatch () {
        startTime = currentTimeMillis();
    }

    /*  Скрытые поля данных startTime и endTime с getter-методами */
    public static long getStartTime() {
        return startTime;
    }

    public static long getEndTime() {
        return endTime;
    }

    /* сбрасывает startTime до текущего времени */
    public long start() {
        return startTime = currentTimeMillis();
    }

    /* Присваивает endTime текущее время */
    public long stop() {
        return endTime = System.currentTimeMillis();
    }

    /* Возвращает прошедшее время на секундомере в миллисекундах */
    public static long getElapsedTime() {
        return endTime - startTime;
    }
}

Подскажите, где ошибка? P.S. Поменяла сортировку. Сортировка теперь есть. Методы вызвала. Я так понимаю, теперь работает верно программа?

Ответы

▲ 0Принят
    import static java.lang.System.currentTimeMillis;
import java.util.Arrays;

public class StopWatch {

    /* поля данных */
    private static long startTime;
    private static long endTime;

    /* Метод main */
    public static void main (String[] args) {
        StopWatch time = new StopWatch();

        int[] list = new int [100000];

        for (int i = 0; i < list.length - 1; i++) {
            list[i] = (int) (Math.random() * 100000);

        }
        /* Сортировка массива
        Arrays.sort(list);
        System.out.println("\n Сортировка массива: ");
        for (int num : list) {
            System.out.print(num + " ");
        } */
        time.start();
        time.selectionSort(list);
        time.stop();
        System.out.println("\n Время прошло в миллисекундах " + time.getElapsedTime());

    }

    /* Безаргументный конструктор, который инициализирует startTime с текущим временем */

    StopWatch () {
        startTime = currentTimeMillis();
    }

    /*  Скрытые поля данных startTime и endTime с getter-методами */
    public static long getStartTime() {
        return startTime;
    }

    public static long getEndTime() {
        return endTime;
    }

    /* сбрасывает startTime до текущего времени */
    public long start() {
        return startTime = currentTimeMillis();
    }

    /* Присваивает endTime текущее время */
    public long stop() {
        return endTime = System.currentTimeMillis();
    }

    /* Возвращает прошедшее время на секундомере в миллисекундах */
    public static long getElapsedTime() {
        return endTime - startTime;
    }
    public static void selectionSort(int[] list) {
        for (int i = 0; i < list.length; i++) {
            int minInd = i;
            int min = list[i];
            //цикл выбора наименьшего элемента
            for (int j = i + 1; j < list.length; j++) {
                if (list[j] < min) {
                    //minInd - индекс наименьшего элемента
                    minInd = j;
                    min = list[j];
                }
            }
            list[minInd] = list[i];
            //меняем местами наименьший с sortArr[i]
            list[i] = min;
        }
    }
}