黑马程序员技术交流社区
标题:
高手给我解释解释。
[打印本页]
作者:
hahh
时间:
2013-12-19 19:46
标题:
高手给我解释解释。
本帖最后由 hahh 于 2013-12-19 23:08 编辑
public class Test3 {
public static void sop(String str){
System.out.println(str);
}
public static void main(String[] args) {
String s = "cbdea";
sop(sortString(s));
}
public static String sortString(String str){
char[] chs = str.toCharArray();
bubbleSort(chs);
return new String(chs);
}
public static void bubbleSort(char[] arr){//这块的用int为何不行那,为什么必须这样的格式那。
for (int i = 0; i < arr.length-1; i++) {
for (int j = i+1; j < arr.length; j++) {
if(arr
>arr[j]){
int temp = arr
;
arr
= arr[j];
arr[j] = (char) temp;为什么这里一定有个(char),没有就不对那》
}
}
}
}
}
作者:
公子-醉香
时间:
2013-12-19 20:04
public class Test3 {
public static void sop(String str){
System.out.println(str);
}
public static void main(String[] args) {
String s = "cbdea";
sop(sortString(s));
}
public static String sortString(String str){
char[] chs = str.toCharArray();
bubbleSort(chs);
return new String(chs);
}
public static void bubbleSort(char[] arr){//这块的用int为何不行那,为什么必须这样的格式那。
for (int i = 0; i < arr.length-1; i++) {
for (int j = i+1; j < arr.length; j++) {
if(arr[i]>arr[j]){
int temp = arr[i];
arr[i] = arr[j];
arr[j] = (char)temp;//为什么这里一定有个(char),没有就不对那?
}
}
}
}
}
/*
你的这个问题的根本就是类型匹配的问题。
1.首先你定义了一个String类型的字符串
2.然后你用str.toCharArray()方法把它转换成了字符数组,在数组中存放的就变成字符类型的了
3.对数组中的元素进行了排序,因为你在排序中定义的temp是int类型的,最后就需要把它强转成char类型
这种定义在语法上是没有错误的,但整个程序阅读起来非常的不容易。
4.直接改成下面的方式,简单易懂。
char temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
*/
复制代码
作者:
lichao
时间:
2013-12-19 20:56
我加了注释,希望对你有帮助
public class Test3 {
public static void sop(String str){ //封装了输出语句,有利于书写简便。
System.out.println(str);
}
public static void main(String[] args) {
String s = "cbdea";
sop(sortString(s));//可以拆成 String str=soreString(s);sop(str);
}
public static String sortString(String str){//将字符串变成字符数组的方法。
char[] chs = str.toCharArray();
bubbleSort(chs);//调用字符数组排序方法
return new String(chs);//将排序好的数组转化成字符串返回
}
public static void bubbleSort(char[] arr){//上面调用这个方法时传入的参数数字符数组,那么接受时,当然也要是字符数组呀!传入数值类型应与接受参数类型一致
for (int i = 0; i < arr.length-1; i++) {
for (int j = i+1; j < arr.length; j++) {//大圈套小圈的循环
if(arr[i]>arr[j]){
int temp = arr[i];//这里如果定义成char temp = arr[i];那么后面就不用强制类型转换了。
arr[i] = arr[j];
arr[j] = (char) temp;//因为你在定义的temp类型时int型的占四个字节,arr[j]是char型的占一个字节,char可以自动转换成int型的,但是int型的不能自动转换成char型的,这样会引起数据丢失,int型数据转换成char型数据时要强制类型转换
}
}
}
}
}
复制代码
作者:
hahh
时间:
2013-12-19 23:08
lichao 发表于 2013-12-19 20:56
我加了注释,希望对你有帮助
懂了。谢谢
作者:
小马过河
时间:
2013-12-20 06:03
同学,回复贴入代码是用的那个文本工具?
新手各种不专业
作者:
FFF
时间:
2013-12-20 10:44
小马过河 发表于 2013-12-20 06:03
同学,回复贴入代码是用的那个文本工具?
新手各种不专业
用表情左边的"<>"符号的工具
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2