String【】s和int【】c对应起来

AC_YE 2021-03-11 05:17:21
String[] s={"张三","李四","王五"}; int【】c={20,18,19} 这个代表张三20岁,李四18,王五19 现在要将他们年龄从小到大排序然后按照 姓名:年龄这样的格式输出 这个题目将年龄排序后,数据元素的下标改变了,和原始的姓名就对应不上了,就是之前张三的年龄是20,现在排序后张三的年龄是18了,怎样解决这个问题,要将排序后姓名还是原来对应的
...全文
551 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_25376897 2021-03-18
  • 打赏
  • 举报
回复

public class Test {
    public static void main(String[] args) {
        String[] s ={"张三","李四","王五"};
        int[] c ={20,18,19};
        selectSort(c,s);
        for(int i=0;i<s.length;i++){
            System.out.println(s[i]+":"+c[i]);
        }
    }

    //选择排序
    public static void selectSort(int[] arr1,String[] arr2){
        for(int i = 0; i < arr1.length-1; i++){
            int min = i;
            for(int j = i+1; j <arr1.length ;j++){
                if(arr1[j]<arr1[min]){
                    min = j;
                }
            }
            if(min!=i){
                swap1(arr1, i, min);
                swap2(arr2, i, min);
            }
        }
    }
    //完成数组两元素间交换
    public static void swap1(int[] arr,int a,int b){
        int temp = arr[a];
        arr[a] = arr[b];
        arr[b] = temp;
    }

    public static void swap2(String[] arr,int a,int b){
        String temp = arr[a];
        arr[a] = arr[b];
        arr[b] = temp;
    }
}
yuge_Bwqz 2021-03-17
  • 打赏
  • 举报
回复
找到年龄数组最小的值的下标i,这个下标s[i]:c[i]就是结果
mymtom 2021-03-12
  • 打赏
  • 举报
回复
年龄和名字做属性做个 Person 类啊,然后用List.sort排序即可

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;

public class Person {

String name;
int age;

public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
public int getAge() {
return age;
}

@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}

public static void main(String[] args) {
List<Person> persons = new ArrayList<>();
persons.add(new Person("张三", 20));
persons.add(new Person("李四", 18));
persons.add(new Person("王五", 19));
System.out.println("before sort: " + persons);
persons.sort(Comparator.comparing(Person::getAge));
System.out.println("after sort: " + persons);
/* out put
before sort: [Person [name=张三, age=20], Person [name=李四, age=18], Person [name=王五, age=19]]
after sort: [Person [name=李四, age=18], Person [name=王五, age=19], Person [name=张三, age=20]]
*/
}

mymtom 2021-03-12
  • 打赏
  • 举报
回复

public class SortDemo {

public static void main(String[] args) {
String [] s = {"张三", "李四", "王五"};
int [] c = {20, 18, 19};

int n = c.length;
for (int i = 0; i < n - 1; i++) {
for (int j = i + 1; j < n; j++) {
if (c[i] > c[j]) {
int c0 = c[i];
c[i] = c[j];
c[j] = c0;
String s0 = s[i];
s[i] = s[j];
s[j] = s0;
}
}
}

for (int i = 0; i < n; i++) {
System.out.printf("%s: %s%n", s[i], c[i]);
}
}
/* 输出
李四 : 18
王五 : 19
张三 : 20
*/

AC_YE 2021-03-12
  • 打赏
  • 举报
回复
引用 13 楼 qq_39936465的回复:
[quote=引用 9 楼 ~Commodity 的回复:][quote=引用 7 楼 起名伤脑的回复:]map那么简单为啥不用map
题目是这样要求的[/quote] 年龄排序的时候,名字跟着一起排序不就好了[/quote] 名字字符串怎样跟着一起排?
qq_39936465 2021-03-12
  • 打赏
  • 举报
回复
引用 9 楼 ~Commodity 的回复:
[quote=引用 7 楼 起名伤脑的回复:]map那么简单为啥不用map
题目是这样要求的[/quote] 年龄排序的时候,名字跟着一起排序不就好了
lin351550660 2021-03-12
  • 打赏
  • 举报
回复
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;

public class Test {

    public static void main(String[] args) {
        String[] s={"张三","李四","王五"};
        Integer[] c={20,18,19};
        HashMap<Integer,String> map = new HashMap<>();
        ArrayList<Integer> list = new ArrayList();
        for (int i = 0; i< c.length; i++){
            map.put(c[i],s[i]);
            list.add(c[i]);
        }
        Collections.sort(list);
        for (Integer key:list) {
            System.out.println("年龄:"+key+" 姓名:"+map.get(key));
        }

    }
}
输出结果 年龄:18 姓名:李四 年龄:19 姓名:王五 年龄:20 姓名:张三
起名伤脑 2021-03-11
  • 打赏
  • 举报
回复
用TreeMap,把两个数组所对应逐次添加,treemap会根据key,也就是数组的数字大小来进行排序的
AC_YE 2021-03-11
  • 打赏
  • 举报
回复
引用 7 楼 起名伤脑的回复:
map那么简单为啥不用map
题目是这样要求的
AC_YE 2021-03-11
  • 打赏
  • 举报
回复
引用 5 楼 起名伤脑的回复:
选择排序不是你想象的那样
就是将年龄用选择排序,然后要姓名+年龄输出,但是将年龄排完序后,关键是怎样输出姓名+年龄这样的格式?
起名伤脑 2021-03-11
  • 打赏
  • 举报
回复
map那么简单为啥不用map
AC_YE 2021-03-11
  • 打赏
  • 举报
回复
引用 4 楼 起名伤脑的回复:
选择排序(从小到大,每次将a[i]到a[n]中最小的值找到,并放到a[i]处 [quote=引用 3 楼 ~Commodity 的回复:][quote=引用 2 楼 ~Commodity的回复:]还有其他办法吗,不用map,例如用循环之类的
排序可以用选择排序[/quote][/quote] 但是排完序之后怎样和名字对应输出呢
起名伤脑 2021-03-11
  • 打赏
  • 举报
回复
选择排序不是你想象的那样
起名伤脑 2021-03-11
  • 打赏
  • 举报
回复
选择排序(从小到大,每次将a[i]到a[n]中最小的值找到,并放到a[i]处
引用 3 楼 ~Commodity 的回复:
[quote=引用 2 楼 ~Commodity的回复:]还有其他办法吗,不用map,例如用循环之类的
排序可以用选择排序[/quote]
AC_YE 2021-03-11
  • 打赏
  • 举报
回复
引用 2 楼 ~Commodity的回复:
还有其他办法吗,不用map,例如用循环之类的
排序可以用选择排序
AC_YE 2021-03-11
  • 打赏
  • 举报
回复
还有其他办法吗,不用map,例如用循环之类的
明白畅达 2021-03-11
  • 打赏
  • 举报
回复
先对应存入map再排序

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧