有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java气泡按Desc/升序对数组中的字符串数据进行排序

我在数组中排序字符串时遇到了问题

我应该从我的代码中得到两个不同的输出,但是我只得到升序的输出

    import java.util.*;
public class nextLineArray1
{
    public static void main(String[] args)
    {
        Scanner input = new Scanner(System.in);
        String names[]=new String[12];
        System.out.println("Enter the 12 names: ");
        //Load Array
        for(int i = 0; i < 12; i++)
        {
            names[i] = input.nextLine();

        }

        //Print descending order list
        String[] descSort;
        descSort=bubbleSortDesc(names);
        System.out.println("Names listed sorted in descending order (via BubbleSort): ");
        for(int x=0; x < names.length; x++)
        {
            System.out.println(names[x]);
        }
        //Print ascending order list
        String[] ascSort;
        ascSort=bubbleSortAsc(names);
        System.out.println("Names listed sorted in ascending order (via BubbleSort): ");
        for(int z=0; z < names.length; z++)
        {
            System.out.println(names[z]);
        }
    }
    public static String[] bubbleSortDesc(String[] names)
    {
        String temp;
        int passNum, i, result;
        for(passNum=1; passNum <= 11; passNum++)
        {
            for(i = 0; i<=(11-passNum); i++)
            {
                result=names[i].compareToIgnoreCase(names[i+1]);
                if(result>0)
                {
                    temp=names[i];
                    names[i]=names[i+1];
                    names[i+1]=temp;
                }
            }
        }
        return names;

    }

    public static String[] bubbleSortAsc(String[] names)
    {
        String temp;
        int passNum, i, result;
        for(passNum=1; passNum <= 11; passNum++)
        {
            for(i = 0; i<=(11-passNum); i++)
            {
                result=names[i].compareToIgnoreCase(names[i]);
                if(result>0)
                {
                    temp=names[i-1];
                    names[i-1]=names[i];
                    names[i]=temp;
                }
            }
        }
        return names;
    }
}

解释一下为什么它只是按升序排序,会更有帮助

提前谢谢


共 (2) 个答案

  1. # 1 楼答案

    事实上你让事情变得很难

    对于booble排序:

    而且我猜你让它变得非常困难,你可以像这样对它们进行排序和打印:

        ...
        for(int i = 0; i < (names.length - 1); i++){
            for(int j = i; j < (names.length - 1); j++){
                if(names[j].compareToIgnoreCase(names[i]) > 0){
                    String aux = names[i];
                    names[i] = names[j];
                    names[j] = aux;
                }
            }
        }
        for(int i = 0; i < names.length; i++){
            System.out.println(names[i]);
        }
        for(int i = 0; i < (names.length - 1); i++){
            for(int j = i; j < (names.length - 1); j++){
                if(names[j].compareToIgnoreCase(names[i]) < 0){
                    String aux = names[i];
                    names[i] = names[j];
                    names[j] = aux;
                }
            }
        }
        for(int i = 0; i < names.length; i++){
            System.out.println(names[i]);
        }
        ...
    

    希望这有帮助

  2. # 2 楼答案

    在我看来bubbleSortDesc是按升序排序的,而BubbleSortAsc根本不起作用:

                //In BubbleSortAsc
                result=names[i].compareToIgnoreCase(names[i]);
                //result == 0, since names[i] is definitely equal to names[i]
                if(result>0)
                {
                    //Never reached
                    temp=names[i-1];
                    names[i-1]=names[i];
                    names[i]=temp;
                }
    

    所以,在BubbleSortAsc中,你应该:

                result=names[i].compareToIgnoreCase(names[i+1]);
                if(result>0) //names[i] > names[i+1], so swap them.
    

    在BubbleSortDesc中:

                result=names[i].compareToIgnoreCase(names[i+1]);
                if(result<0) // This was backwards.  If names[i] < names[i+1], you need to swap, for descending order.