如何将int sort切换为String排序?

时间:2013-06-10 18:49:43

标签: java list sorting

我编写了一些用于对用户输入的随机整数进行排序的代码。如何将其切换为随机输入的字母排序? Aka,用户输入j,s,g,w,程序输出g,j,s,w?

for (int i = 0; i < random.length; i++) { //"random" is array with stored integers
                // Assume first value is x
                x = i;
                for (int j = i + 1; j < random.length; j++) {
                    //find smallest value in array (random)
                    if (random[j] < random[x]) {
                        x = j;
                    }
                }
                if (x != i) {
                    //swap the values if not in correct order
                    final int temp = random[i];
                    random[i] = random[x];
                    random[x] = temp;
                }
                itsATextArea.append(random[i] + "\n");// Output ascending order
            }

最初我希望(虽然我知道我是正确的机会对我不利)用“字符串”替换所有'int'会起作用......自然我错了,意识到也许我必须列出什么字母通过使用列表如list.add(“a”)来到之前;等

我很抱歉,如果这似乎是我要求你们做所有的工作(我不是),但我不完全确定如何开始这个,所以如果有人可以给出一些提示或提示,非常感谢!

7 个答案:

答案 0 :(得分:5)

您可以使用String.compareTo()来执行此操作:

改变这个:

int[] random = new int[sizeyouhad];
...
if (random[j] < random[x]) {
...
final int temp = random[i];

为:

String[] random = new String[sizeyouhad];
...
if (random[j].compareTo(random[x]) < 0) {
...
final String temp = random[i];

使用您的代码进行试用:

String[] random = new String[3];
random[0] = "b";
random[1] = "c";
random[2] = "a";
int x = 0;
//"random" is array with stored integers
for (int i = 0; i < random.length; i++) { 
    // Assume first value is x
    x = i;
    for (int j = i + 1; j < random.length; j++) {
        //find smallest value in array (random)
        if (random[j].compareTo(random[x]) < 0) {
            x = j;
        }
    }
    if (x != i) {
        //swap the values if not in correct order
        final String temp = random[i];
        random[i] = random[x];
        random[x] = temp;
    }
    System.out.println(random[i] + "\n");// Output ascending order
}

答案 1 :(得分:0)

如果您只是尝试对字符串列表进行排序,则应该使用java.util.Collections.sort方法而不是编写自己的排序例程。

答案 2 :(得分:0)

原来是random int[]?如果您已将此更改为String[],则可以使用String#compareTo方法来判断一个字符串是否“小于”另一个字符串。

顺便提一下,您可以将random的类型更改为Comparable[],然后您可以使用相同的算法对其类实现接口的任何对象进行排序!

答案 3 :(得分:0)

尝试使用Collections.sort()功能

List<String> l = Arrays.asList("j","s", "g","w");
Collections.sort(l);

答案 4 :(得分:0)

如果您认为每个字符都是代码点[1]并且您希望按Unicode代码点顺序排序[2],那么实际上不需要更改您的逻辑。工作是从你给出的任何输入(String,char []等)转换为代码点的int []。

[1] - http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#codePointAt(int) [2] - http://en.wikipedia.org/wiki/Code_point

答案 5 :(得分:0)

您可以使用generics使您的代码适用于任何类型的Object

答案 6 :(得分:0)

以下代码非常简单且完美无缺(使用此库可以在几行中解决您的问题):

import static ch.lambdaj.Lambda.sort;
import static ch.lambdaj.Lambda.on;
import java.util.Arrays;
import java.util.List;

public class Test{
        public static void main(String[] args) {
            List<String> list =  Arrays.asList("1","102","-50","54","ABS");

            List<String> newList = sort(list, on(String.class));
            System.out.println(newList);//[-50, 1, 102, 54, ABS]


}
}

此代码使用lambda库(download herewebsite)。在网站上找到这个例子:

List<Person> sorted = sort(persons, on(Person.class).getAge());