黑马程序员技术交流社区
标题:
真崩溃,,为什么为什么为什么
[打印本页]
作者:
史政法
时间:
2013-4-3 06:45
标题:
真崩溃,,为什么为什么为什么
本帖最后由 史政法 于 2013-4-5 20:51 编辑
/*
对字符串中字符进行自然顺序排序。
思路:
1,字符串变成字符数组。
2,对数组排序,选择,冒泡,Arrays.sort();
3,将排序后的数组变成字符串。
"vcz1bdAa+cs"-->abccdsvz
*/
import java.util.*;
class Demo
{
public static void sop(Object obj)
{
System.out.println(obj);
}
public static void main(String[] args)
{
String s = "vcz1bdAa+cs";
s = toSort(s);
sop(s);
}
public static String toSort(String s)
{
//将字符串变成字符数组
char[] chr = new char[s.length()];
chr = s.toCharArray();
//对字符数组进行排序,使用选择排序。排序过程中判断字符是否是小写a-z之间的字符,如果不是,不排序,
sort(chr); //<font color="#ff0000">这个地方,明明已经把小写的a-z选出来排序过了,为什么转成字符串后还是原来的字符串呢?为什么为什么啊?</font>
//将排序后的数组变成字符串。
return String.valueOf(chr);
}
//对数组进行排序
public static void sort(char[] chr)
{
chr = clear(chr);
for(int x = 0;x<chr.length;x++)
{
for(int y = x+1;y<chr.length;y++)
{
if(chr[x]>chr[y])
location(chr,x,y);
}
}
}
//获取小写a-z的字符
public static char[] clear(char[] chr)
{
StringBuilder sb = new StringBuilder();
for(int x = 0;x<chr.length;x++)
{
if((chr[x]>='a' && chr[x]<='z'))
sb.append(chr[x]);
}
String s = sb.toString();
return s.toCharArray();
}
//换位动作。
public static void location(char[] chr,int x,int y)
{
char temp = chr[x];
chr[x] = chr[y];
chr[y] = temp;
}
}
复制代码
作者:
史政法
时间:
2013-4-3 06:47
晕,问题在33行 font color标签内,,,,
作者:
史政法
时间:
2013-4-3 07:56
我自己又看了几遍,发现,在第41行,chr = clear(chr);,,,这句话字符数组类型变量chr已经重新指向了一个新的数组,所以下面的for运算,运算的是新的数组中的内容,跟原引用毛联系都没有,真蛋疼,,,,,,,解决办法就是,别在排序里获取小写的a-z字符了,直接先获取完,把获取到的结果传给排序的函数,,,,,,,,,,,,
作者:
史政法
时间:
2013-4-3 08:00
这是毕老师留的一个练习题目,修改完后的代码如下,感觉这块不是太熟悉,实现方法肯定有很多种,一会再发个帖子看看其他哥们都是怎样实现的。事实证明,东西是学到了,但是学习后没有进行总结,所以到用的时候不知道怎么用了,,,总结很重要,否则会很蛋疼。。。。。。现在就滚去写总结去。。。。。。:
import java.util.*;
class Demo
{
public static void sop(Object obj)
{
System.out.println(obj);
}
public static void main(String[] args)
{
String s = "vcz1bdAa+cs";
s = toSort(s);
sop(s);
}
public static String toSort(String s)
{
//将字符串变成字符数组
char[] chr = new char[s.length()];
chr = s.toCharArray();
//对字符数组进行排序,使用选择排序。排序过程中判断字符是否是小写a-z之间的字符,如果不是,不排序,
chr = clear(chr);
sort(chr);
//将数组变成字符串返回去。
return String.valueOf(chr);
}
//对数组进行排序
public static void sort(char[] chr)
{
for(int x = 0;x<chr.length;x++)
{
for(int y = x+1;y<chr.length;y++)
{
if(chr[x]>chr[y])
location(chr,x,y);
}
}
}
//换位动作,确实做了,而且操作了数组中的元素,被数组记录了下来。
public static void location(char[] chr,int x,int y)
{
char temp = chr[x];
chr[x] = chr[y];
chr[y] = temp;
}
public static char[] clear(char[] chr)
{
StringBuilder sb = new StringBuilder();
for(int x = 0;x<chr.length;x++)
{
if((chr[x]>='a' && chr[x]<='z'))
sb.append(chr[x]);
}
String s = sb.toString();
return s.toCharArray();
}
}
复制代码
作者:
史政法
时间:
2013-4-3 08:02
或者有哥们还在看这个帖子的话,告诉我你有几种实现的方法,哪一种好些??
题目:
/*
对字符串中字符进行自然顺序排序。
思路:
1,字符串变成字符数组。
2,对数组排序,选择,冒泡,Arrays.sort();
3,将排序后的数组变成字符串。
"vcz1bdAa+cs"-->abccdsvz
*/
作者:
黄玉昆
时间:
2013-4-3 12:28
如果问题未解决,请继续追问,如果没有问题了,请将帖子分类 改为“已解决”,谢谢
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2