для циклов и фрагментов, где мы переназначаем переменные - PullRequest
0 голосов
/ 04 ноября 2019

Задача: написать программу, которая меняет максимальный и минимальный элементы данного массива. Распечатайте массив до и после этой операции.

Я все еще большой новичок в программировании, большую часть времени я просто не могу представить, что делают коды.

public class problem6 {
    public static void main(String[] args) {
        int[] arr = new int[15];
        for (int i = 0; i < arr.length; i++)
/*
I don't think I really understand incrementation in loops, what exactly do they do? As far as I understand 
it is like having an industry line? I suppose 'i' would be the product and '++' would be the thing that 
carries 'i' to the be checked one by one? I really need an ape analogy because I can't really visualize it.
*/
            arr[i] = (int) (Math.random() * 15);

        for (int i = 0; i < arr.length; i++)
            System.out.print(arr[i] + ", ");
        System.out.println();

        int minIndex = 0, maxIndex = 0; //why do we assign min and max to 0 and not any other number?
        for (int i = 1; i < arr.length; i++) {
            if (arr[minIndex] > arr[i])
                minIndex = i;
            if (arr[maxIndex] < arr[i])
                maxIndex = i;
/*
I see a lot of codes like:

if (arr[minIndex] > arr[i])
                minIndex = i;
            if (arr[maxIndex] < arr[i])
                maxIndex = i;
what purpose does it serve? For the lack of knowledge and from a really noob programmer's perspective
it seems like we are "reassigning" minIndex and maxIndex to 'i', which is probably not what we're actually doing
but I don't know how to describe it other way.
*/
        }
        System.out.println(minIndex + " " + arr[minIndex]);
        System.out.println(maxIndex + " " + arr[maxIndex]);


        {

            int tmp = arr[minIndex];
            arr[minIndex] = arr[maxIndex];
            arr[maxIndex] = tmp;
/*
Here again, for the lack of understanding and better way of describing, it seems to me that we are reassigning,
which makes it appear illogical to me, but I'd assume it's not actually "reassigning".

int tmp = arr[minIndex];
            arr[minIndex] = arr[maxIndex];
            arr[maxIndex] = tmp;
*/
        }

        for (int i = 0; i < arr.length; i++)
            System.out.print(arr[i] + ", ");
        System.out.println();
    }
}

Ответы [ 2 ]

3 голосов
/ 04 ноября 2019

Вот быстрое решение для вас.

Ниже приведен полный пример замены максимальных и минимальных элементов данного массива.

Ввод:

Введите элементы, которые вы хотите ввести в массив: 5

Введите все элементы: 10 15 16 1 9

Выход:

Элемент После перестановок: 10 15 1 16 9

public static void main(String arg[]) {
        Scanner scan = null;
        int number;
        try {
            scan = new Scanner(System.in);
            System.out.println("Enter elements you want to input in array: ");
            number = scan.nextInt();
            int array[] = new int[number];
            System.out.println("Enter all the elements:");

            for (int i = 0; i < number; i++) {
                array[i] = scan.nextInt();
            }
            int[] resultArray = swap(array);
            System.out.println("Element After swaps :");
            for (int i : resultArray) {
                System.out.println(i);
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
            scan.close();
        }
    }

    public static int[] swap(int[] array) {
        int minIndex = 0, maxIndex = 0;
        for (int i = 1; i < array.length; ++i) {
            if (array[i] < array[minIndex])
                minIndex = i;
            if (array[i] > array[maxIndex])
                maxIndex = i;
        }
        int t;
        if (maxIndex != minIndex) {
            t = array[minIndex];
            array[minIndex] = array[maxIndex];
            array[maxIndex] = t;
        }
        return array;
    }

Надеюсь, что это решение работает. Пожалуйста отметьте как ответ, если это решение полезно.

0 голосов
/ 04 ноября 2019

Что такое i, что он делает и что означает i++:

i используется в этом цикле, чтобы указать, сколько раз вы зациклилисьчерез указанный цикл.

++ предназначен для выполнения i + 1 после каждого повторения цикла по циклу for.

Для лучшего понимания того, как вы используете i в своем примере, представьте, что массив arr является большой книгой, и в [] вы пишете, какую страницу вы хотите открыть. В цикле вы в основном пролистываете книгу по каждому номеру страницы в этих скобках.

Почему minIndex и maxIndex устанавливаются в 0 вместо любого другого числа?

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

Почему мы заставляем arr[minIndex] указывать то же значение, что и arr[maxIndex]?

В заголовке вашего вопроса вы сказали, что хотите поменять самое большое число в вашеммассив с наименьшим номером. Итак, теперь, когда мы нашли самое большое и самое низкое число в вашем массиве, эти шаги переключают два.

Если у вас есть какие-либо другие вопросы или если какое-либо из моих описаний неясно, просто прокомментируйте под ответом, и я сделаю все возможное, чтобы помочь вам. Кроме того, не смотри на себя так сильно. В какой-то момент все были "нубами":)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...