Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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_Sorting_Overriding - Fatal编程技术网

Java 定义(或重写)数组。排序方法

Java 定义(或重写)数组。排序方法,java,sorting,overriding,Java,Sorting,Overriding,我有如下的课程 public class MyClass{ int x; String str; public MyClass(int x) { this.x=x; } public static void main(String args[]) { MyClass[] myclass=new MyClass[10]; Random rnd=new Random(); for(int i=0;i<10;i++) {

我有如下的课程

public class MyClass{
  int x;
  String str;
  public MyClass(int x)
    {
     this.x=x;
    }
public static void main(String args[])
{
   MyClass[] myclass=new MyClass[10];
   Random rnd=new Random();
   for(int i=0;i<10;i++)
    {
      myclass[i]=new MyClass(rnd.nextInt());
     }
}
}
公共类MyClass{
int x;
字符串str;
公共MyClass(int x)
{
这个.x=x;
}
公共静态void main(字符串参数[])
{
MyClass[]MyClass=新的MyClass[10];
随机rnd=新随机();

对于(inti=0;i在您的例子中,由于您的
MyClass
类显然有一个自然的顺序,最简单的方法是让它实现接口

之后,您可以使用

公共类MyClass实现了可比较的{
int x;
 ...
@覆盖
公共整数比较(MyClass o){
返回o.x-x;
}
公共静态void main(字符串参数[]){
MyClass[]myarray=新的MyClass[10];
  ...
Arrays.sort(myarray);
}
}

在您的例子中,由于您的
MyClass
类显然有一个自然的顺序,最简单的方法是让它实现接口

之后,您可以使用

公共类MyClass实现了可比较的{
int x;
 ...
@覆盖
公共整数比较(MyClass o){
返回o.x-x;
}
公共静态void main(字符串参数[]){
MyClass[]myarray=新的MyClass[10];
  ...
Arrays.sort(myarray);
}
}

存在许多
数组.sort
方法的重载。其中之一是

public static void sort(Object[] a, int fromIndex, int toIndex, Comparator c)
根据指定比较器产生的顺序对指定对象数组的指定范围进行排序。要排序的范围从索引fromIndex(包含)扩展到索引fromIndex(独占)。(如果fromIndex==toIndex,则要排序的范围为空。)范围内的所有元素必须通过指定的比较器相互比较(即,c.compare(e1,e2)不得对范围内的任何元素e1和e2抛出ClassCastException)

您可以定义并使用
比较器


而且,由于它是一个
静态
方法,因此无法重写。

存在许多
数组.sort
方法的重载。其中之一是

public static void sort(Object[] a, int fromIndex, int toIndex, Comparator c)
根据指定比较器产生的顺序对指定对象数组的指定范围进行排序。要排序的范围从索引fromIndex(包含)扩展到索引fromIndex(独占)。(如果fromIndex==toIndex,则要排序的范围为空。)范围内的所有元素必须通过指定的比较器相互比较(即,c.compare(e1,e2)不得对范围内的任何元素e1和e2抛出ClassCastException)

您可以定义并使用
比较器


而且,由于它是一种
静态
方法,因此无法重写它。

您可以使用arrays.sort获取用户输入并相应地进行排序

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;

public class SortMyNumbers {
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        String strUserInput = "";
        String strOp = "";
        BufferedReader reader = new BufferedReader(new InputStreamReader(
                System.in));

        do {
            System.out
                    .println("...Enter no.s or Type End to terminate the program...");
            try {
                strUserInput = reader.readLine();

            } catch (IOException e) {
                e.printStackTrace();
            }
            if (!strUserInput.equalsIgnoreCase("end")
                    && strUserInput.contains(",")) {
                System.out.println(" Entered No.s are ..." + strUserInput);
                System.out.println("Enter no.s...");
                String strArr[] = strUserInput.split(",");

                double iArr[] = new double[strArr.length];
                int i = 0;
                // Arrays.sort(strArr);
                for (String s : strArr) {
                    iArr[i] = Double.parseDouble(s);
                    i++;
                }
                Arrays.sort(iArr);
                for (double j : iArr) {
                    strOp += String.valueOf(j) + ",";
                }
                System.out.println(" Sorted No  are " + strOp);
            } else {
                // System.out.println("Invalid i/p terminating...");
            }
            strOp = strOp.substring(0, strOp.length() - 1);

        } while (!strUserInput.equalsIgnoreCase("end"));
    }
}

您可以使用arrays.sort获取用户输入并进行相应的排序

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;

public class SortMyNumbers {
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        String strUserInput = "";
        String strOp = "";
        BufferedReader reader = new BufferedReader(new InputStreamReader(
                System.in));

        do {
            System.out
                    .println("...Enter no.s or Type End to terminate the program...");
            try {
                strUserInput = reader.readLine();

            } catch (IOException e) {
                e.printStackTrace();
            }
            if (!strUserInput.equalsIgnoreCase("end")
                    && strUserInput.contains(",")) {
                System.out.println(" Entered No.s are ..." + strUserInput);
                System.out.println("Enter no.s...");
                String strArr[] = strUserInput.split(",");

                double iArr[] = new double[strArr.length];
                int i = 0;
                // Arrays.sort(strArr);
                for (String s : strArr) {
                    iArr[i] = Double.parseDouble(s);
                    i++;
                }
                Arrays.sort(iArr);
                for (double j : iArr) {
                    strOp += String.valueOf(j) + ",";
                }
                System.out.println(" Sorted No  are " + strOp);
            } else {
                // System.out.println("Invalid i/p terminating...");
            }
            strOp = strOp.substring(0, strOp.length() - 1);

        } while (!strUserInput.equalsIgnoreCase("end"));
    }
}

我认为compareTo应该返回(x-o.x),这是我在阅读了您建议的可比文件后的感受。无论如何,非常感谢您的帮助。这完全取决于x对于您的自然顺序的含义。如果您想在之前获得小x,那是对的。我认为compareTo应该返回(x-o.x),这就是我在阅读了你推荐的可比文件后的感受。无论如何,非常感谢你的帮助。这完全取决于你的自然顺序中x的含义。如果你想在之前得到小x,那是对的。