Связывание и сортировка массивов - PullRequest
1 голос
/ 05 ноября 2019

Итак, я довольно новичок в программировании (я начал месяц назад), и недавно я начал изучать массивы и сортировку. Для домашней работы я получил задание сделать три массива (имя, место жительства и сумму денег), а затем распечатать программу, указав имя, место жительства и сумму денег, а также отсортировать их согласноколичество денег у них есть. Я надеюсь, что в этом есть смысл. До сих пор мне удавалось только запрограммировать сортировку суммы денег от самой большой до самой маленькой, но я не знаю, как связать массив с числами с двумя другими массивами, чтобы он печатал все правильно.

Так, например, у меня есть:

String[] Names = {"Person","Human","Man","Woman"};
String[] Adress = {"Hole","Street","Attic","Room"};
int[] Money = {25,0,12,13};

И вместо него распечатать:

Person 
Hole 
25
Woman 
Room 
13
Man 
Attic 
12
Human 
Hole 
0

Он просто распечатывает:

Person 
Hole
25
Human
Street
13
Man
Attic
12
Woman
Room
0

Я надеюсь, что некоторыеможет помочь. Я пытался выяснить самостоятельно, но я застрял. Спасибо

Также вот код, который у меня есть:

package practice;
import java.util.Scanner;
public class Try {

    public static void main(String[] args) {

        String[] Names = {"Person","Human","Man","Woman"};
        String[] Adress = {"Hole","Street","Attic","Room"};
        int[] Money = {25,0,12,13};


            int first, current, least, temp;

            for(first=0;first<4;first++){
              least=first;
              for(current=first+1;current<4;current++){
                if (Money[current]>Money[least]){
                  least=current;
                }
                temp=Money[least];
                Money[least]=Money[first];
                Money[first]=temp;
              }
            }


            for (int i=0;i<4;i++){
              System.out.println(Names[i]);
              System.out.println(Adress[i]);
              System.out.println(Money[i]);
            }
          }


    }

Ответы [ 4 ]

1 голос
/ 05 ноября 2019

Я думаю, что в вашем решении не хватает "связи" между вашими массивами. Я объясню свое решение. Вы добавляете новый массив, эквивалентный вашему массиву Money и имеющий индексы каждого элемента от 0 до 3.

Для элемента 0 у вас есть Person Hole 25

Для элемента 1 выHuman Street 0 и т. д. *

Цель массива Link - сохранить связь между деньгами и элементом. Поэтому, когда алгоритм сортирует массив Money, он соответствующим образом переставляет индексы, чтобы сохранить ссылку.

Например, у человека меньше денег (0), чем у человека (12), поэтому мы будем переставлять от 0 до12, но чтобы не потерять свои индексы, мы также переставим 1 и 2, которые являются Link [1] и Link [2] и которые эквивалентны человеку и человеку. Таким образом, в конце, когда мы распечатываем, мы распечатаем элементы денежного массива и ссылаемся на имя и адрес, содержащиеся в элементах массива ссылок, которые по-прежнему связываются между тремя таблицами. Надеюсь, вы поняли, о чем я говорю, может быть, я много говорил.

public class Try {

    public static void main(String[] args) {

        String[] Names = {"Person","Human","Man","Woman"};
        String[] Adress = {"Hole","Street","Attic","Room"};
        int[] Money = {25,0,12,13};

        int[] Link = {0,1,2,3};

           int first, current, least, temp;

            for(first=0;first<4;first++){
              least=first;
              for(current=first+1;current<4;current++){
                if (Money[current]>Money[least]){
                  least=current;
                }
                temp=Money[least];
                Money[least]=Money[first];
                Money[first]=temp;

                temp=Link[least];
                Link[least]=Link[first];
                Link[first]=temp;


              }
            }


            for (int i=0;i<4;i++){
              System.out.println(Names[Link[i]]);
              System.out.println(Adress[Link[i]]);
              System.out.println(Money[i]);
            }
          }




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

Просто используйте любую сортировку для сортировки денег и при замене элемента Money поменяйте местами оба элемента Имен и массива адресов

            String[] Names = {"Person","Human","Man","Woman"};
            String[] Address = {"Hole","Street","Attic","Room"};
            int[] Money = {25,0,12,13};

            int n = Money.length;
            for (int i = 0; i < n-1; i++) {
                for (int j = 0; j < n-i-1; j++) {
                    if (Money[j] < Money[j+1])
                    {
                        // swap Money array element
                        int temp = Money[j];
                        Money[j] = Money[j+1];
                        Money[j+1] = temp;

                        // swap Names array element
                        String tempName = Names[j];
                        Names[j] = Names[j+1];
                        Names[j+1] = tempName;

                        // swap Address array element
                        String tempAddress = Address[j];
                        Address[j] = Address[j+1];
                        Address[j+1] = tempAddress;


                    }
                }
            }

            for (int i = 0; i < Money.length; i++) {
                System.out.println(Names[i]);
                System.out.println(Address[i]);
                System.out.println(Money[i]);
            }
0 голосов
/ 05 ноября 2019

В вашем алгоритме сортировки вы уже работаете с индексами (first, least и current). Когда вы используете их для замены двух элементов массива Money здесь:

temp=Money[least];
Money[least]=Money[first];
Money[first]=temp;

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

package practice;

public class Try {

    public static void main(String[] args) {

        String[] names = {"Person", "Human", "Man", "Woman"};
        String[] adress = {"Hole", "Street", "Attic", "Room"};
        int[] money = {25, 0, 12, 13};

        for(int first = 0; first < 4; first++){
            int most = first;
            for(int current = first + 1; current < 4; current++){
                if (money[current] > money[most]){
                    most = current;
                }
                int temp = money[most];
                money[most] = money[first];
                money[first] = temp;

                String tempString = names[most];
                names[most] = names[first];
                names[first] = tempString;

                tempString = adress[most];
                adress[most] = adress[first];
                adress[first] = tempString;
            }
        }

        for (int i = 0; i < 4; i++){
            System.out.println(names[i]);
            System.out.println(adress[i]);
            System.out.println(money[i]);
        }
    }
}

(я позволил себе немного почистить ваш код.)

И последнее, но не менее важное: есть еще много способов написания чищеи более структурированный и оптимизированный код, а что нет. Но так как ваше задание связано с пониманием самых базовых концепций Java и кодирования в целом, этот подход пока отлично работает. Только одна вещь о Java-соглашениях об именах : имена классов начинаются с заглавной буквы, тогда как методы и переменные начинаются с строчной буквы. Компилятор не будет жаловаться, если вы не будете придерживаться его, но код станет менее читабельным, поскольку вы никогда не узнаете, например, является ли Money переменная или класс.

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

Вот подсказка: внутри вложенных циклов, меняющих элементы денежного массива, вы думаете, что можете поменять и другие элементы?

temp=Money[least];
Money[least]=Money[first];
Money[first]=temp;

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

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