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