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,那是对的。