Java 链接和排序数组

Java 链接和排序数组,java,arrays,sorting,Java,Arrays,Sorting,所以,我对编程非常陌生(一个月前开始),最近我开始学习数组和排序。作为家庭作业,我得到一个任务,制作三个数组(姓名、居住地和金额),然后让程序打印出一个人的姓名、居住地和金额,并根据他们拥有的金额对其进行排序。我希望这是有道理的。到目前为止,我只需要编程将金额从最大到最小排序,但我不知道如何将带有数字的数组链接到其他两个数组,以便它正确地打印所有内容 例如,我有: String[] Names = {"Person","Human","Man","Woman"}; String[] Adress

所以,我对编程非常陌生(一个月前开始),最近我开始学习数组和排序。作为家庭作业,我得到一个任务,制作三个数组(姓名、居住地和金额),然后让程序打印出一个人的姓名、居住地和金额,并根据他们拥有的金额对其进行排序。我希望这是有道理的。到目前为止,我只需要编程将金额从最大到最小排序,但我不知道如何将带有数字的数组链接到其他两个数组,以便它正确地打印所有内容

例如,我有:

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]);
            }
          }


    }
包装实践;
导入java.util.Scanner;
公务舱试驾{
公共静态void main(字符串[]args){
String[]name={“Person”、“Human”、“Man”、“Woman”};
字符串[]地址={“洞”、“街”、“阁楼”、“房间”};
int[]货币={25,0,12,13};
int first,current,least,temp;

for(first=0;first这里有一个提示:在交换money数组元素的嵌套for循环中,您认为还可以交换其他元素吗

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

在编程中,当代码变得混乱时,可以在一张纸上画出一些东西,并在代码中记录所有不同的变量。试着写出数组,看看每一行代码都会发生什么。

我认为解决方案中缺少的是“链接”在阵列之间。 我将解释我的解决方案。您添加一个新数组,该数组相当于您的Money数组,每个元素的索引从0到3

对于元素0,有人孔25

对于元素1,您有人类街道0 等等

链接数组的目标是保留货币和元素之间的链接。 因此,当算法对货币数组排序时,它将相应地排列索引以保留链接

例如,人的钱(0)比人(12)少,所以我们将在0和12之间进行排列,但为了不丢失他们的索引,我们还排列了1和2,即链接[1]和链接[2]最后,当我们打印出来时,我们将打印money数组元素,并引用链接数组元素中包含的名称和地址,链接数组元素仍在三个表之间链接。 我希望你明白我在说什么,也许我说了很多

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]);
            }
          }




    }
公共类尝试{
公共静态void main(字符串[]args){
String[]name={“Person”、“Human”、“Man”、“Woman”};
字符串[]地址={“洞”、“街”、“阁楼”、“房间”};
int[]货币={25,0,12,13};
int[]Link={0,1,2,3};
int first,current,least,temp;

对于(first=0;first在排序算法中,您已经在使用索引(
first
least
current
)。当您在此处使用它们交换
Money
数组的两个元素时:

temp=钱[最少];
钱[最少]=钱[第一];
金钱[第一]=临时工;
对其他两个数组执行同样的操作。最好的方法是为其编写一个方法,这样您就不必编写不必要的冗余代码。但是,由于您对编码非常陌生,所以我们暂时不要这样做。一种可能的解决方案可能如下所示:

包装实践;
公务舱试驾{
公共静态void main(字符串[]args){
String[]name={“Person”、“Human”、“Man”、“Woman”};
字符串[]地址={“洞”、“街”、“阁楼”、“房间”};
int[]货币={25,0,12,13};
for(int first=0;first<4;first++){
int most=第一;
对于(int current=first+1;current<4;current++){
如果(货币[当前]>货币[多数]){
most=电流;
}
int temp=货币[大部分];
钱[多数]=钱[第一];
金钱[第一]=临时工;
String tempString=名称[大多数];
姓名[多数]=姓名[第一名];
名称[第一个]=临时字符串;
tempString=地址[大多数];
地址[多数]=地址[第一];
地址[第一]=临时字符串;
}
}
对于(int i=0;i<4;i++){
System.out.println(名称[i]);
系统输出println(地址[i]);
System.out.println(money[i]);
}
}
}
(我冒昧地清理了一下您的代码。)


最后但并非最不重要的一点是,仍然有许多方法可以编写更干净、更结构化和优化的代码。但是,由于您的任务是了解Java的基本概念和总体编码,因此这种方法目前应该可以很好地发挥作用。关于类名,只有一件事:类名以大写字母开头HOD和变量以小写字母开头。如果您不遵守它,编译器不会抱怨,但代码的可读性会降低,因为您永远不知道例如
Money
是一个变量还是一个类。

只需使用任何排序对Money进行排序,在交换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]);
            }
String[]name={“Person”、“Human”、“Man”、“Woman”};
字符串[]地址={“洞”、“街”、“阁楼”、“房间”};
int[]货币={25,0,12,13};
int n=货币长度;
对于(int i=0;i