课堂测试
递归
上周课堂上老师给了一个递归的题目,没有做出来,课后学习了一下。题目如下:
我写的代码如下:
public class TestArgs1{
public static void main(String [] args){
int num = Integer.parseInt(args[0]);
System.out.println(Sum(num));
}
public static int Sum(int n){
if (n==1)
return n;
else
return n = Sum(n-1)+n;
}
}
运行结果如下:
MySort
本周课上有一个MySort的题目:
课后我写了如下代码
import java.util.*;
public class MySort{
public static void main(String [] args){
String [] toSort = { "aa:10:1:2",
"dd:20:5:2",
"cc:40:4:5" };
System.out.println("Before sorting:");
for (String str : toSort)
System.out.println(str);
//sort
int [] c3 = new int[toSort.length];
for (int j=0; j<toSort.length; j++){
String [] tmp = toSort[j].split(":");
c3[j] = Integer.parseInt(tmp[2]);
}
Arrays.sort(c3);
System.out.println("After sorting:");
for (int i=0; i<c3.length; i++){
for(int j=0; j<toSort.length; j++){
char a = toSort[j].charAt(7);
if ((int)a == c3[i]){
System.out.println(toSort[j]);
}
}
}
}
}
编译没问题,可运行时却出现了问题
结果只打印了排序之前的,排序之后的没有打印。我在IDEA里调试了一下
发现运行到if语句时,把a转换成Int类型,实际上是字符‘1’的ASCII码49,所以不管怎么比较都是false
,自然就执行后面的语句了。为了解决这个问题,我将if ((int)a == c3[i])
改成了if ((int)a-48 == c3[i])
,这样就可以了。