从排序字符串对象数组获得奇怪的输出(提供代码)?

时间:2014-04-18 23:37:19

标签: java arrays sorting user-input

注意:不使用arraylist,hashset,set或导入除Scanner之外的任何其他包。

public static String sorting(){
for (int i = 0; i < pigArray.length; i++){
    for (int k = i + 1; k <pigArray.length; k++){

        if(pigArray[k].getName().trim().compareTo(pigArray[i].getName().trim())< 0){
        String temp = pigArray[i].getName();
        pigArray[i].setName( pigArray[k].getName );
        pigrray[k].setName(temp);
        }
        }
    }
}

String sorted = "";

for (int m = 0; m < pigArray.length; m++){

    sorted = sorted + "\n" + pigArray[m].getSortedName();     
}

return sorted;
}

基本上我的代码会发生的事情是,如果用户输入的每个输入都是乱序的(我的意思是每一个输入),程序就会对它们进行排序。

示例(非实际输入,但有说明):  输入:e,c,b,输出:a,b,c,d

但是,即使其中一个位于正确的位置,程序也会将其替换为null。

实施例:   输入:a,e,d,c输出:null,c,d,e

我不知道为什么会这样。输入数量无关紧要。

任何提示都表示赞赏。谢谢。

编辑:

    private String name;

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

public String getSortedName() {
    return name;
   }

2 个答案:

答案 0 :(得分:0)

我认为您的错误可能在于您实施pigArray。

我更改了你的代码,以便pigArray只是一个String数组,它对我的​​值进行了排序。

public class Test {
     private static String[] pigArray;

public static String sorting(){
    pigArray = new String[]{"a", "e", "d", "c"};

    for (int i = 0; i < pigArray.length; i++){
        for (int k = i + 1; k <pigArray.length; k++){

            if(pigArray[k].trim().compareTo(pigArray[i].trim())< 0){
            String temp = pigArray[i];
            pigArray[i]=( pigArray[k] );
            pigArray[k]=(temp);
            }
            }
        }

    String sorted = "";

    for (int m = 0; m < pigArray.length; m++){

        sorted = sorted + "\n" + pigArray[m];     
    }

    return sorted;
    }

public static void main(String args[]) {
    System.out.print(Test.sorting());
}
}

按预期返回“acde”。

答案 1 :(得分:0)

if(pigArray[k].getName().trim().compareTo(pigArray[i].getName().trim())< 0){
    String temp = pigArray[i].getName();
    pigArray[i].setName( pigArray[k].getName );
    pigrray[k].setName(temp);
    }
 elseif(pigArray[k].getName().trim().compareTo(pigArray[i].getName().trim())> 0){
    String temp = pigArray[k].getName();
    pigArray[k].setName( pigArray[i].getName );
    pigrray[i].setName(temp);
    }
 else
    pigArray[i].setName( pigArray[i].getName );`

我认为应该可行,但我不会使用其他代码。希望它有所帮助。