20155204第12周课堂实践总结

20155204第12周课堂实践总结

一、实践内容及步骤

  1. 教材代码检查

解决方法:这部分没什么难度,主要是检查之前有没有敲好的代码,改动部分输出内容就好

  1. 在IDEA中以TDD的方式对String类和Arrays类进行学习,测试相关方法的正常,错误和边界情况
  • String类
    • charAt
    • split
  • Arrays类
    • sort
    • binarySearch

解决方法:

  • 既然利用TDD的方式,我们就要从测试类来着手
  • charAt:我们先来查一下API看看它的用法
    ,我们从这里得知它需要的参数类型,返回的数据类型,以及需要注意的第一个索引为0,可以开始编写断言式了,
 assertEquals('c',string.charAt(2));

string是我定义的一个字符串。

  • split:也是先看API
    它返回的是字符串数组,然而断言式没法比较数组,所以我就用这样的方法来比较
    String[] ss = string.split(":");
    assertEquals("abcde",ss[0]);
  • sort:
    sort的用法比较多,我们用到的是比较简单的,直接排序、比较即可。
    Arrays.sort(i);
    assertEquals(2,i[1]);
  • binarySearch:
    这是二分法查找的方法,需要注意的就是使用前要使用sort方法排序,具体实现如下
Arrays.sort(i);
        assertEquals(1,Arrays.binarySearch(i,2));
  • 几个测试类写好了,剩下的就是怎么重写上面的四个方法使得我们可以调用他们。对于String的两个方法,我们可以创建一个String对象,利用它来调用两个方法,对于Arrays的两个方法,我们只需要在编写方法的时候定义合适的变量即可。具体如下
import java.util.*;
import java.lang.*;

public class Myutil {
    String string = new String();

    public char charAt(int n) {
        return string.charAt(n);
    }

    public String[] split(String regex) {
        return string.split(regex);
    }

    public void sort(int[] a) {
         Arrays.sort(a);
    }

    public void binarySearch(int[] a,int key){
        Arrays.binarySearch(a,key);
    }

3.模拟实现Linux下Sort -t : -k 2的功能。参考 Sort的实现。

   1 import java.util.*;
  2
  3 public class MySort {
  4     public static void main(String [] args) {
  5         String [] toSort = {"aaa:10:1:1",
  6                             "ccc:30:3:4",
  7                             "bbb:50:4:5",
  8                             "ddd:20:5:3",
  9                             "eee:40:2:20"};
 10
 11         System.out.println("Before sort:");
 12         for (String str: toSort)
 13                     System.out.println(str);
 14
 15         Integer [] tmp = new Integer [toSort.length];
 16         for(int i=0; i<tmp.length; i++)
 17             tmp[i] = ...;
 18
 19         Arrays.sort(tmp);
 20
 21         System.out.println("After sort:");
 22
 23         for(int i=0; i<tmp.length; i++)
 24             for(int j=0; j<toSort.length; j++)
 25                 if(...)
 26                    System.out.println(toSort[j]);
 27     }
 28 }

解决方法:
整个代码的目的是将一个字符串数组的排序前和排序后的结果输出,而排序则需要按照字符串数组中元素的某一部分作为标准。需要补充的地方是第17行和25行,17行需要将字符串数组中选出的排序标准部分选出,传给tmp数组,25行需要根据tmp的顺序来匹配toSort数组的完整字符串内容然后输出。通过利用split方法可以很好的完成这件事情,实现如下。

17 tmp[i] = new Integer(Integer.parseInt(toSort[i].split(":")[3]));
25  if (tmp[i] == Integer.parseInt(toSort[j].split(":")[3]))

二、问题及解决

  • 问题1:断言式无法处理数组,该怎么测试split方法?
  • 解决方法:先用一个数组接受split的结果,然后分别从原数组和该数组取出一部分进行比较。具体代码上方有。
  • 问题2:不能定义Arrays的对象,该怎么在主类中写它的方法?
  • 解决方法:重写Arrays的方法时直接在传入参数处定义就好。Arrays不像String。

三、心得与体会

这周的实践没做出来感到很绝望,在课下花了功夫去学习,发现确实是没有学到位,有很多混淆的地方,下面就要做第四次实验了,要抓住最后的机会。

posted @ 2017-05-13 22:51  20155204王昊  阅读(202)  评论(0编辑  收藏  举报