课堂测试

课堂测试

递归

上周课堂上老师给了一个递归的题目,没有做出来,课后学习了一下。题目如下:

我写的代码如下:

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]),这样就可以了。

posted @ 2017-05-03 21:21  20162311张之睿  阅读(277)  评论(2编辑  收藏  举报