我编写了一些用于对用户输入的随机整数进行排序的代码。如何将其切换为随机输入的字母排序? 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”)来到之前;等
我很抱歉,如果这似乎是我要求你们做所有的工作(我不是),但我不完全确定如何开始这个,所以如果有人可以给出一些提示或提示,非常感谢!
答案 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 here,website)。在网站上找到这个例子:
List<Person> sorted = sort(persons, on(Person.class).getAge());