Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何相对地对两个数组进行排序?_Java_Arrays_Sorting - Fatal编程技术网

Java 如何相对地对两个数组进行排序?

Java 如何相对地对两个数组进行排序?,java,arrays,sorting,Java,Arrays,Sorting,我正在尝试制作一个学生成绩计划,其中有两个数组:String[]Student和double[]Grade。 我将它们克隆为一个排序数组和一个未排序数组 阵列: 公共类测试代码{ 公共静态void main(字符串[]args){ 字符串ArrN[]={“Garcia”、“Magsilang”、“Magbag”}; 双ArrG[]={2.5,1.25,1.5}; 字符串ArrN2[]=ArrN.clone(); 双ArrG2[]=ArrG.clone(); Arrays.sort(ArrN2);

我正在尝试制作一个学生成绩计划,其中有两个数组:
String[]
Student和
double[]
Grade。 我将它们克隆为一个排序数组和一个未排序数组

阵列:

公共类测试代码{
公共静态void main(字符串[]args){
字符串ArrN[]={“Garcia”、“Magsilang”、“Magbag”};
双ArrG[]={2.5,1.25,1.5};
字符串ArrN2[]=ArrN.clone();
双ArrG2[]=ArrG.clone();
Arrays.sort(ArrN2);
Arrays.sort(ArrG2);
System.out.println(Arrays.toString(ArrN1));
System.out.println(Arrays.toString(ArrN2));
System.out.println(Arrays.toString(ArrG2));
System.out.println(Arrays.toString(ArrG2));
}
}
现在,我如何使输出看起来像下面的输出(按等级排序)

或(学生分类)


因为你不是单独处理名字和等级。我建议为您的问题创建一个
StudentGrade
类,如下所示:

private静态类StudentGrade{
字符串名;
双级;
公立学生年级(字符串n,双g){
this.name=n;
该等级=g;
}
}
您可以创建一个
StudentGrade[]
数组,并使用适合您的用例的任何字段对其进行排序。我用
name
grade
对它进行排序,我能够看到预期的输出

StudentGrade[]studentGrades=新StudentGrade[]{
新学生等级(“加西亚”,2.5),
新学生等级(“马格斯朗”,1.25),
新学生等级(“Magbag”,1.5)
};
//按名称排序
System.out.println(“(学生排序):”;
排序(studentGrades,Comparator.comparing(o->o.name));
打印学生成绩(学生成绩);
//按等级分类
System.out.println(“(等级排序):”;
排序(studentGrades,Comparator.comparing(o->o.grade));
打印学生成绩(学生成绩);
这将打印此输出:

(Student Sorted):
Garcia 2.5
Magbag 1.5
Magsilang 1.25
(Grade Sorted):
Magsilang 1.25
Magbag 1.5
Garcia 2.5

我试着得到你的第二个输出。用于对数组进行排序

类测试代码{
公共静态void main(字符串[]args){
字符串ArrN[]={“Garcia”、“Magsilang”、“Magbag”};
双ArrG[]={2.5,1.25,1.5};
//基于ArrG阵列的冒泡排序
对于(int i=0;i
输出:

Garcia 2.5
Magbag 1.5
Magsilang 1.25

这是一个基本的方法!您还可以使用
或内置的
数组()
方法

正如其他人所说,如果您有一个单独的类
StudentGrade
,它保存名称和等级,然后您可以利用已经实现的算法
集合。sort
,它从Java 8接受类的方法引用,那么它就更有意义了

代码如下:

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

class StudentGrade {

    private String name;
    private double grade;

    public StudentGrade(String name, double grade) {
        this.name = name;
        this.grade = grade;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getGrade() {
        return grade;
    }

    public void setGrade(double grade) {
        this.grade = grade;
    }
}

public class Testcode {

    public static void main(String[] args) {

        List<StudentGrade> students = new ArrayList<>();

        students.add(new StudentGrade("Garcia", 2.5));
        students.add(new StudentGrade("Magsilang", 1.5));
        students.add(new StudentGrade("Magbag", 1.25));

        Collections.sort(students, Comparator.comparing(StudentGrade::getGrade));
        System.out.println("Grade Sorted");
        for (StudentGrade studentGrade : students) {
            System.out.println(studentGrade.getGrade() + " " + studentGrade.getName());
        }

        Collections.sort(students, Comparator.comparing(StudentGrade::getName));
        System.out.println("\nStudent Sorted");
        for (StudentGrade studentGrade : students) {
            System.out.println(studentGrade.getName() + " " + studentGrade.getGrade());
        }

    }
}
要获得两个数组相对的排序副本,您可以首先成对链接这些数组的元素,然后对这些元素对进行排序—您将获得一个排序列表。作为您可以使用的每一对、数组或某个类的容器。例如:

String[]arrN={“Garcia”、“Magsilang”、“Magbag”};
双[]arrG={2.5,1.25,1.5};
List List=IntStream
//假设两个数组的长度相同,
//迭代第一个数组的索引
.范围(0,阵列长度)
//连接一对两个元素
.mapToObj(i->Map.entry(arrN[i],arrG[i]))
//收集地图条目列表
.collect(Collectors.toList());
//按名称排序
list.sort(Map.Entry.comparingByKey());
list.forEach(System.out::println);
//加西亚=2.5
//磁袋=1.5
//马格斯朗=1.25
//按等级排序
list.sort(Map.Entry.comparingByValue());
list.forEach(System.out::println);
//马格斯朗=1.25
//磁袋=1.5
//加西亚=2.5


另请参见:

为什么不创建一个
StudentGrade
类,将姓名和成绩放在一个位置我实际上创建了一个类来容纳数组,但我的问题是这样的,比如说Array1=“SA”,“SB”,SC“//StudentName Array2=1.0,3.0,5.0//学生成绩输出应按最高成绩排序,同时在数组1.0=SA 3.0=SC 5.0=SB的同一索引上显示相应的姓名在两个单独的数组之间保持顺序将非常烦人。最好的选择是创建一个专用类来存储这两个对象(单个学生的姓名和成绩),并拥有这些对象的数组。然后,您可以按照名称或等级对其进行排序,并始终获取其他相关数据。然后创建studentgrade.class,然后将其继承到main.class可以解决问题吗?如果是这样的话,那么是否有一个我可以基于的代码?好的,谢谢你,我一定会尝试我的代码并用它进行实验。好的,请让我知道它是否适用于你的用例。好的,在我的switch-case语句中确认它有效后,我将更新您,感谢againIt对switch-case参数进行了修改。总的来说,这个程序是有效的。好的,谢谢你,我一定会在我的代码中尝试这个,并用它进行实验。不客气。你介意投票接受答案吗?我们将非常感谢。非常感谢。
Garcia 2.5
Magbag 1.5
Magsilang 1.25
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

class StudentGrade {

    private String name;
    private double grade;

    public StudentGrade(String name, double grade) {
        this.name = name;
        this.grade = grade;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getGrade() {
        return grade;
    }

    public void setGrade(double grade) {
        this.grade = grade;
    }
}

public class Testcode {

    public static void main(String[] args) {

        List<StudentGrade> students = new ArrayList<>();

        students.add(new StudentGrade("Garcia", 2.5));
        students.add(new StudentGrade("Magsilang", 1.5));
        students.add(new StudentGrade("Magbag", 1.25));

        Collections.sort(students, Comparator.comparing(StudentGrade::getGrade));
        System.out.println("Grade Sorted");
        for (StudentGrade studentGrade : students) {
            System.out.println(studentGrade.getGrade() + " " + studentGrade.getName());
        }

        Collections.sort(students, Comparator.comparing(StudentGrade::getName));
        System.out.println("\nStudent Sorted");
        for (StudentGrade studentGrade : students) {
            System.out.println(studentGrade.getName() + " " + studentGrade.getGrade());
        }

    }
}
Grade Sorted
1.25 Magbag
1.5 Magsilang
2.5 Garcia

Student Sorted
Garcia 2.5
Magbag 1.25
Magsilang 1.5