一道关于数组的程序题 将数组[j,K,a,A,f,F]排序成[A,a,F,f,j,K]貌似不能按照ascii码来排,还请大虾帮忙解决! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 做一个简单映射,比如把大写字母映射到某个2n,小写字母映射到对应的2n+1,依次类推,ok 把所有字符转化成小写的 转换过的加个标示位 然后排序呗... 用HashMap 最后在把有标示位的还原回来 想法完全可以实现,或者大小写字母排到俩个数组中,最后在利用ASSCII码的差值合在一起。 justinavril能不能给点代码提示?如果是把大写的加一个标识位,那么在HashMap中不是有些key是空的吗?这样如何排序? 做个Comparator大写CODE+N*2小写插进去排 转成Character类写个Comparator比较toLowerCase后的值'a'<'b',和原先的值'A'<'a'Arrays.sort就可以了 简单写了一个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, 借用这位兄弟的思想: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)); } } }} 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) + ","); } } } 哈哈,好多高手啊 这个方法最好了,自己改写比较器里的方法就好了 再调用ArrayList.sort()方法 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; }} 一道小游戏 java生成JAR 可以运行但有些功能却不行 Java中的ImageIcon怎样只读取的GIF的某一帧 100分关于多线程JPanel类的graphic struts里面的struts_config_xml的配置问题,请帮忙指教 JAVA如何与MYSQL数据库进行连接? 请花1分钟告诉俺一个简单问题 jbuilder恢复以前的版本,怎样加入history,怎样恢复到某一版本? 菜鸟问题?请各位指点 怎样在JBUILDER中使用JDOM API? 一个提交表单前的判断函数,谢谢! 请教下hibernate保存数据问题
大写CODE+N*2
小写插进去
排
写个Comparator比较toLowerCase后的值'a'<'b',和原先的值'A'<'a'
Arrays.sort就可以了
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,
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));
}
}
}
}
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) + ",");
}
}
}
再调用ArrayList.sort()方法
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;
}
}