一道关于数组的程序题

houyongbo03 2008-09-21 10:29:04
将数组[j,K,a,A,f,F]排序成[A,a,F,f,j,K]
貌似不能按照ascii码来排,还请大虾帮忙解决!
...全文
208 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
malligator 2008-09-22
  • 打赏
  • 举报
回复
public class Test01 {

public static void main(String[] args) {
char ch[] = {'j','K','a','A','f','F'};
System.out.println("before sorting, array=" + Arrays.toString(ch));
for (int i = 0; i < ch.length; i++) {
for (int j = 0; j < ch.length-1; j++) {
if (lt(ch[i], ch[j])) {
char t = ch[i];
ch[i]=ch[j];
ch[j]=t;
}
}
}
System.out.println("after sorting, array=" + Arrays.toString(ch));
}

private static boolean lt(char c, char d) {
if (c == d - 'A' + 'a') {
return false;
}
if (c - 'A' + 'a' == d) {
return true;
}
return Character.toLowerCase(c) - Character.toLowerCase(d) < 0;
}
}
zapdos 2008-09-21
  • 打赏
  • 举报
回复
做个Comparator
大写CODE+N*2
小写插进去
houyongbo03 2008-09-21
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 justinavril 的回复:]
把所有字符转化成小写的 转换过的加个标示位 然后排序呗... 用HashMap 最后在把有标示位的还原回来
[/Quote]
justinavril能不能给点代码提示?如果是把大写的加一个标识位,那么在HashMap中不是有些key是空的吗?这样如何排序?
wangydong 2008-09-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ZangXT 的回复:]
做一个简单映射,比如把大写字母映射到某个2n,小写字母映射到对应的2n+1,依次类推,ok
[/Quote]
想法完全可以实现,或者大小写字母排到俩个数组中,最后在利用ASSCII码的差值合在一起。
justinavril 2008-09-21
  • 打赏
  • 举报
回复
把所有字符转化成小写的 转换过的加个标示位 然后排序呗... 用HashMap 最后在把有标示位的还原回来
ZangXT 2008-09-21
  • 打赏
  • 举报
回复
做一个简单映射,比如把大写字母映射到某个2n,小写字母映射到对应的2n+1,依次类推,ok
pgyzyzj 2008-09-21
  • 打赏
  • 举报
回复
学习!
zhuzhu_qiu 2008-09-21
  • 打赏
  • 举报
回复
Arrays.sort() 方法
wenzheng38 2008-09-21
  • 打赏
  • 举报
回复
哈哈,好多高手啊

[Quote=引用 6 楼 fosjos 的回复:]
转成Character类
写个Comparator比较toLowerCase后的值'a' <'b',和原先的值'A' <'a'
Arrays.sort就可以了
[/Quote]
这个方法最好了,自己改写比较器里的方法就好了
再调用ArrayList.sort()方法
rainsilence 2008-09-21
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 aniude 的回复:]
简单写了一个
public class ComparetorTest {
public static void main(String[] args) {
char[] arr = {'j', 'K', 'a', 'A', 'f', 'F'};

Map <Double, String> kv = new HashMap <Double, String>();
Double[] dArr = new Double[arr.length];

for (int i = 0; i < arr.length; i++) {
dArr[i] = (arr[i] >= 'a') ? arr[i] - 31.5D : arr[i];
kv.put(dArr[i], String.valueOf(arr[i]));
}

Arrays.sort(dArr);

[/Quote]
可以的
xiongwenhua365 2008-09-21
  • 打赏
  • 举报
回复
public class ComparetorTest {
public static void main(String[] args) {
char[] arr = {'j', 'K', 'a', 'A', 'f', 'F'};

Map <Double, String> kv = new HashMap <Double, String>();
Double[] dArr = new Double[arr.length];

for (int i = 0; i < arr.length; i++) {
dArr[i] = (arr[i] >= 'a') ? arr[i] - 31.5D : arr[i];
kv.put(dArr[i], String.valueOf(arr[i]));
}

Arrays.sort(dArr);

for (Double d: dArr) {
System.out.print(kv.get(d) + ",");
}
}
}
xiongwenhua365 2008-09-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ZangXT 的回复:]
做一个简单映射,比如把大写字母映射到某个2n,小写字母映射到对应的2n+1,依次类推,ok
[/Quote]
借用这位兄弟的思想:
import java.util.*;
public class Test2
{
public static void main(String[] args)
{
char[] ch={'j','K','a','A','f','F'};
int[] temp=new int[ch.length];
for(int i=0;i<ch.length;i++)
{
if(Character.isLowerCase(ch[i]))
{
temp[i]=2*((int)ch[i]-97)+1;
}
else
{
temp[i]=2*((int)ch[i]-64);
}
System.out.println(temp[i]);
}
Arrays.sort(temp);
for(int i=0;i<ch.length;i++)
{
if(temp[i]%2==0)
{
System.out.print((char)(temp[i]/2+64));
}
else
{
System.out.print((char)((temp[i]-1)/2+97));
}
}
}
}

aniude 2008-09-21
  • 打赏
  • 举报
回复
简单写了一个
public class ComparetorTest {
public static void main(String[] args) {
char[] arr = {'j', 'K', 'a', 'A', 'f', 'F'};

Map<Double, String> kv = new HashMap<Double, String>();
Double[] dArr = new Double[arr.length];

for (int i = 0; i < arr.length; i++) {
dArr[i] = (arr[i] >= 'a') ? arr[i] - 31.5D : arr[i];
kv.put(dArr[i], String.valueOf(arr[i]));
}

Arrays.sort(dArr);

for (Double d: dArr) {
System.out.print(kv.get(d) + ",");
}
}
}
输出:
A,a,F,f,j,K,
fosjos 2008-09-21
  • 打赏
  • 举报
回复
转成Character类
写个Comparator比较toLowerCase后的值'a'<'b',和原先的值'A'<'a'
Arrays.sort就可以了

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧