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 如何使用compareTo()方法按字母顺序对字符串(多于2个变量)排序?_Java_Sorting_Compareto - Fatal编程技术网

Java 如何使用compareTo()方法按字母顺序对字符串(多于2个变量)排序?

Java 如何使用compareTo()方法按字母顺序对字符串(多于2个变量)排序?,java,sorting,compareto,Java,Sorting,Compareto,我不知道如何使用compareTo()方法对字符串(多于2个)进行排序。对于2,我正在这样做: Scanner input = new Scanner(System.in); String name1 = input.nextLine(); String name2 = input.nextLine(); if(name1.compareTo(name2) < 0) { System.out.println(name1 + "\n" + name2); } else {

我不知道如何使用compareTo()方法对字符串(多于2个)进行排序。对于2,我正在这样做:

Scanner input = new Scanner(System.in);

String name1 = input.nextLine();
String name2 = input.nextLine();

if(name1.compareTo(name2) < 0)
{
    System.out.println(name1 + "\n" + name2);
}
else
{
    System.out.println(name2 + "\n" + name1);
} 
扫描仪输入=新扫描仪(System.in);
字符串名称1=input.nextLine();
字符串名称2=input.nextLine();
如果(名称1.与(名称2)相比<0)
{
System.out.println(name1+“\n”+name2);
}
其他的
{
System.out.println(name2+“\n”+name1);
} 
但是如果我需要从用户那里整理更多的数据呢?
谢谢。

正如Mick Mnemonic所说,使用Java的集合类和功能。例如:

List<String> list = new ArrayList<>();
Scanner input = new Scanner(System.in);

//This should be a do-while list
list.add(input.nextLine());
list.add(input.nextLine());

Collections.sort(list);

for(String s: list) {
    System.out.println(s);
}
List List=new ArrayList();
扫描仪输入=新扫描仪(System.in);
//这应该是一个待办事项列表
list.add(input.nextLine());
list.add(input.nextLine());
集合。排序(列表);
用于(字符串s:列表){
系统输出打印项次;
}
这将对列表进行如下排序:“根据其元素的自然顺序,将指定列表按升序排序。”-


不需要比较。

这里是一段示例代码,允许您向列表中添加多个字符串,然后使用Java的默认比较器对它们进行排序

import java.util.*;

public class Test
{
    public static void main(String[] args)
    {
        boolean continueLoop = true;
        List<String> myStringList = new ArrayList<String>();
        Scanner input = new Scanner(System.in);

        System.out.println("Please eneter a string");
        myStringList.add(input.nextLine());
        System.out.println();

        System.out.println("Please eneter a second string");
        myStringList.add(input.nextLine());
        System.out.println();

        while(continueLoop) {

            System.out.println("Would you like to add another string");
            System.out.println("Enter Yes to add another string");
            System.out.println("Enter No to sort the strings");
            System.out.println();
            String yesOrNo = input.nextLine();
            if(yesOrNo.equalsIgnoreCase("Yes")) {
                System.out.println();
                System.out.println("Please enter another string");
                myStringList.add(input.nextLine());
                System.out.println();
            } else {
                continueLoop = false;
                System.out.println();
            }
        }

        Collections.sort(myStringList);

        System.out.println("Sorted Strings");
        for(String s : myStringList) {
            System.out.println("  " + s);
        }
    }
}
编辑

对于特定数量的字符串,可以使用以下代码

import java.util.*;

public class Test
{
    public static void main(String[] args)
    {
        boolean continueLoop = true;
        List<String> myStringList = new ArrayList<String>();
        Scanner input = new Scanner(System.in);

        System.out.println("Please eneter how many strings you will enter");
        int j = Integer.parseInt(input.nextLine());
        System.out.println();

        for(int i=0;i<j;i++) {
            System.out.println("Please eneter a string");
            myStringList.add(input.nextLine());
            System.out.println();
        }

        Collections.sort(myStringList);

        System.out.println("Sorted Strings");
        for(String s : myStringList) {
            System.out.println("  " + s);
        }
    }
}
import java.util.*;
公开课考试
{
公共静态void main(字符串[]args)
{
布尔连续运算=真;
List myStringList=new ArrayList();
扫描仪输入=新扫描仪(System.in);
System.out.println(“请输入要输入的字符串数量”);
int j=Integer.parseInt(input.nextLine());
System.out.println();

对于java中的(inti=0;i,如果要对许多字符串项进行排序,应该将它们放入一个容器中,通常是一个字符串列表(也可以使用数组)

Talk很便宜,向您展示代码,这是排序5字符串的示例

    Scanner input = new Scanner(System.in);

    List<String> stringList = new ArrayList<String>();
    for (int i = 0; i < 5; i++) {  //exact number of string
        stringList.add(input.nextLine());
    }

    System.out.println("before sort:" + stringList);
    Collections.sort(stringList);
    System.out.println("after sort:" + stringList);
扫描仪输入=新扫描仪(System.in);
List stringList=新建ArrayList();
对于(int i=0;i<5;i++){//字符串的确切数目
添加(input.nextLine());
}
System.out.println(“排序前:+stringList”);
Collections.sort(stringList);
System.out.println(“排序后:+stringList”);

更新:

如果您不想使用Java collection framework的排序,如果您真的想手动使用compareTo(),那么您应该实现一个排序算法

扫描仪输入=新扫描仪(System.in);
列表=新的ArrayList();
对于(int i=0;i<5;i++){//字符串的确切数目
list.add(input.nextLine());
}
System.out.println(“排序前:+列表”);
//气泡排序开始
字符串温度;
int length=list.size();
对于(int i=0;i0){//compareTo方法
temp=列表获取(j);
list.set(j,list.get(j+1));
列表设置(j+1,温度);
}
}
//冒泡排序结束
System.out.println(“排序后:+列表”);

您可能正在寻找以下内容:

    String[] arr = {"zsdsfc", "aazjkjf", "aabdd"};

    System.out.println("Before:" + "\n");

    for (int i = 0; i < arr.length; i++ ){

        System.out.println(arr[i]);
    }

    System.out.println();

    for (int i = 0; i < arr.length; i++ ){

        for (int j = 0; j < arr.length; j++){

            if(arr[i].compareTo(arr[j]) < 0){

                String keeper = arr[i];
                arr[i] = arr[j];
                arr[j] = keeper;
            }
        }
    }

    System.out.println("After:" + "\n");

    for (int i = 0; i < arr.length; i++ ){

        System.out.println(arr[i]);
    } 
String[]arr={“zsdsfc”、“aazjkjf”、“aabdd”};
System.out.println(“之前:“+”\n”);
对于(int i=0;i
如果A大于B,则A.CompareTo(B)方法返回负数;如果A等于B,则返回零;如果B大于A,则返回正数


您可以在此处查看。

假设您事先知道要比较的字符串数量,则以下操作不使用数组、列表或任何其他
集合。这将比较5个
字符串
值:

//use a max value for comparisons
private static final String MAX_STRING = String.valueOf(Character.MAX_VALUE); 

public static void compareMe(String a, String b, String c, String d, String e) {
    if (a.compareTo(b) <= 0) {
        if (a.compareTo(c) <= 0) {
            if (a.compareTo(d) <= 0) {
                if (a.compareTo(e) <= 0) {
                    if (a != MAX_STRING) {
                        System.out.println(a);
                        a = MAX_STRING;
                    } else {
                        return;
                    }
                }
                //swap (a,e)
                compareMe(e, b, c, d, a);
            } else {
                //swap (a,d)
                compareMe(d, b, c, a, e);
            }
        } else {
            //swap (a,c)
            compareMe(c, b, a, d, e);
        }
    } else {
        //swap (a,b)
        compareMe(b, a, c, d, e);
    }
}
//使用最大值进行比较
私有静态最终字符串MAX\u String=String.valueOf(Character.MAX\u VALUE);
公共静态无效比较(字符串a、字符串b、字符串c、字符串d、字符串e){

如果(a)与(b)相比,您需要将字符串放入
集合
(例如
数组列表
)然后进行排序。这是一个硬编码的字符串数,比如,用户输入5个字符串,您想对它们进行排序,还是一个可变的字符串数,比如n个字符串,您想对它们进行排序?@aioobe是的,必须对精确的字符串数进行排序。@mickmemmonic是的,我知道。但我需要在不使用数组的情况下进行排序。strin的精确数是存在的必须使用compareTo()进行排序的gs。有关字符串的具体数量,请参见我答案上的编辑。我已经这样做了:如果(a.compareTo(b)<0&&a.compareTo(c)<0&&b.compareTo(c)<0){System.out.print(a+“\n”+b+“\n”+c)}如果(a.compareTo(b)<0&&a.compareTo(c)<0&&c.compareTo(b){System.out.println(a+)\n”+c+“\n”+b”),等等。我还不熟悉自己的函数。所以我使用我所知道的,只是非常基本的东西。无论如何,谢谢你的提示。确保你也在检查等式
    String[] arr = {"zsdsfc", "aazjkjf", "aabdd"};

    System.out.println("Before:" + "\n");

    for (int i = 0; i < arr.length; i++ ){

        System.out.println(arr[i]);
    }

    System.out.println();

    for (int i = 0; i < arr.length; i++ ){

        for (int j = 0; j < arr.length; j++){

            if(arr[i].compareTo(arr[j]) < 0){

                String keeper = arr[i];
                arr[i] = arr[j];
                arr[j] = keeper;
            }
        }
    }

    System.out.println("After:" + "\n");

    for (int i = 0; i < arr.length; i++ ){

        System.out.println(arr[i]);
    } 
//use a max value for comparisons
private static final String MAX_STRING = String.valueOf(Character.MAX_VALUE); 

public static void compareMe(String a, String b, String c, String d, String e) {
    if (a.compareTo(b) <= 0) {
        if (a.compareTo(c) <= 0) {
            if (a.compareTo(d) <= 0) {
                if (a.compareTo(e) <= 0) {
                    if (a != MAX_STRING) {
                        System.out.println(a);
                        a = MAX_STRING;
                    } else {
                        return;
                    }
                }
                //swap (a,e)
                compareMe(e, b, c, d, a);
            } else {
                //swap (a,d)
                compareMe(d, b, c, a, e);
            }
        } else {
            //swap (a,c)
            compareMe(c, b, a, d, e);
        }
    } else {
        //swap (a,b)
        compareMe(b, a, c, d, e);
    }
}