首页 > 其他分享 >6-8次PTA题目总结blog

6-8次PTA题目总结blog

时间:2023-06-28 20:22:07浏览次数:34  
标签:题目 String int PTA ID blog new public name

前言:

题目集 1~3 的知识点、题量、难度等情况如下:

  • 知识点:JAVA基础,基础算法,面向对象程序设计

  • 题量:共计 3 道题目

  • 难度:题目从易到难,逐层递进,分别为考察Java容器的理解、掌握与运用。

设计与分析:

 

  1 import java.util.*;
  2 import java.util.regex.Pattern;
  3 import java.text.Collator;
  4 import java.util.Locale;
  5 
  6 public class Main {
  7     public static void main(String[] args) {
  8         Scanner in = new Scanner(System.in);
  9         String get=in.nextLine() ;
 10         int i=0;
 11         Student[] students=new Student[20] ;
 12         for (int j = 0; j < students.length; j++) {
 13             students[j]=new Student();
 14         }
 15         int j=0;
 16         Lesson[] lessons=new Lesson[20];
 17         for (int i1 = 0; i1 < lessons.length; i1++) {
 18             lessons[i1]=new Lesson();
 19         }
 20 
 21         for(;!get.equals("end");){
 22             StringTokenizer st = new StringTokenizer(get," ");
 23             String first= st.nextToken();
 24             boolean congfu=false;
 25             int time=0;
 26             if(isNumber(first)){
 27                 if(first.length()!=8){
 28                     System.out.println("wrong format");
 29                 }
 30                 for (int k = 0; k <i; k++) {
 31                     if(students[k].getID().equals(first)) {
 32                         time=k;
 33                         congfu = true;
 34                         break;
 35                     }
 36                 }
 37                 if(congfu){
 38                     String two=st.nextToken();
 39                     Lesson temp = new Lesson();
 40                     temp.setName(st.nextToken());
 41                     if (st.countTokens() == 1) {
 42                         String end=st.nextToken();
 43                         if(Integer.parseInt(end)>-1&&Integer.parseInt(end)<101) {
 44                             temp.setEnd(Integer.parseInt(end));
 45                             students[time].setLessons(temp);
 46                         }
 47                     }
 48                     if (st.countTokens() == 2) {
 49                         String normal =st.nextToken();
 50                         String end=st.nextToken();
 51                         if(Integer.parseInt(end)>-1&&Integer.parseInt(end)<101&&Integer.parseInt(normal)>-1&&Integer.parseInt(normal)<101) {
 52                             temp.setNormal(Integer.parseInt(normal));
 53                             temp.setEnd(Integer.parseInt(end));
 54                             students[time].setLessons(temp);
 55                         }
 56                     }
 57                 }
 58                 else {
 59                    String two=st.nextToken();
 60                     Lesson temp = new Lesson();
 61                     temp.setName(st.nextToken());
 62                     if (st.countTokens() == 1) {
 63                         String end=st.nextToken();
 64                         if(Integer.parseInt(end)>-1&&Integer.parseInt(end)<101) {
 65                             temp.setEnd(Integer.parseInt(end));
 66                             students[i].setID(first);
 67                             students[i].setName(two);
 68                             students[i].setLessons(temp);
 69                             i++;
 70                         }
 71                         else
 72                             System.out.println("wrong format");
 73                     }
 74                     if (st.countTokens() == 2) {
 75                         String normal =st.nextToken();
 76                         String end=st.nextToken();
 77                         if(Integer.parseInt(end)>-1&&Integer.parseInt(end)<101&&Integer.parseInt(normal)>-1&&Integer.parseInt(normal)<101) {
 78                             temp.setNormal(Integer.parseInt(normal));
 79                             temp.setEnd(Integer.parseInt(end));
 80                             students[i].setID(first);
 81                             students[i].setName(two);
 82                             students[i].setLessons(temp);
 83                             i++;
 84                         }
 85                         else
 86                             System.out.println("wrong format");
 87                     }
 88                 }
 89             }
 90             else if(first.matches("[\\S]{1,10}")){
 91                 String nature=st.nextToken();
 92                 String method="";
 93                 if(st.countTokens()==1)
 94                     method=st.nextToken();
 95                  else if(st.countTokens()==0)
 96                     method="考试";
 97                 if(nature.equals("必修")){
 98                     if(method.equals("考试")){
 99                         lessons[j].setName(first);
100                         lessons[j].setNature(nature);
101                         lessons[j].setMethod(method);
102                         j++;
103                     }
104                     else{
105                         System.out.println(first+ " : course type & access mode mismatch");
106                         System.out.println(first+" does not exist");
107                     }
108                   }
109                     if(nature.equals("选修")){
110                         if(method.equals("")){
111                            System.out.println("wrong format");
112                             break;
113                         }
114                         else {
115                             lessons[j].setName(first);
116                             lessons[j].setNature(nature);
117                             lessons[j].setMethod(method);
118                             j++;
119                         }
120                     }
121             }
122             get=in.nextLine() ;
123         }
124 
125 
126         List<String> list1 = new ArrayList<>();
127         for (int i1 = 0; !students[i1].getID().equals(""); i1++) {
128             list1.add(students[i1].getID());
129         }
130         Collections.sort(list1, new Comparator<String>() {
131             @Override
132             public int compare(String s1, String s2) {
133                 return s1.compareTo(s2);
134             }
135         });
136         for (String str : list1) {
137             for (int i1 = 0;!students[i1].getID().equals("")  ; i1++) {
138                 if(students[i1].getID().equals(str)){
139                     students[i1].indGrades(lessons);
140                 }
141             }
142         }
143 
144         Arrays.sort(lessons,0,j);
145         for (int i1 = 0; i1<j; i1++) {
146             double normal=0;
147             double fina=0;
148             int count=0;
149             if(lessons[i1].getMethod().equals("考试")) {
150                 for (int k = 0; k < i; k++) {
151                     for (int l = 0; !students[k].getLessons()[l].getName().equals(""); l++) {
152                         if (lessons[i1].getName().equals(students[k].getLessons()[l].getName())) {
153                             if(students[k].getLessons()[l].getNormal() != -1) {
154                                 normal += students[k].getLessons()[l].getNormal();
155                                 fina += students[k].getLessons()[l].getEnd();
156                                 count++;
157                             }
158                         }
159                     }
160                 }
161                 if(count!=0)
162                 System.out.println(lessons[i1].getName()+ " "+(int)Math.floor(normal/count)+" "
163                         +(int)Math.floor(fina/count)+" "+(int) Math.floor(normal/count*0.3+fina/count*0.7) );
164             }
165             if(lessons[i1].getMethod().equals("考察")){
166                 for (int k = 0; k < i; k++) {
167                     for (int l = 0; !students[k].getLessons()[l].getName().equals(""); l++) {
168                         if (lessons[i1].getName().equals(students[k].getLessons()[l].getName())) {
169                             if (students[k].getLessons()[l].getEnd() != -1) {
170                                 fina += students[k].getLessons()[l].getEnd();
171                                 count++;
172                             }
173                         }
174                     }
175                 }
176                 if(count!=0)
177                 System.out.println(lessons[i1].getName()+ " "+(int)Math.floor(fina/count)+" "+(int)Math.floor(fina/count));
178             }
179             if(count==0)
180                 System.out.println(lessons[i1].getName()+" has no grades yet");
181         }
182 
183          List   <String> list2=new ArrayList<>();
184         for (int k = 0; k < i; k++) {
185             boolean setTo=true;
186             String temp =students[k].getID().substring(0,6);
187             for (String str : list2) {
188                 if(str.equals(temp)){
189                     setTo=false;
190                     break;
191                 }
192             }
193             if(setTo){
194                 list2.add(temp);
195             }
196         }
197         Collections.sort(list2, new Comparator<String>() {
198             @Override
199             public int compare(String s1, String s2) {
200                 return s1.compareTo(s2);
201             }
202         });
203         for (String str : list2) {
204             int count=0;
205             double sum=0;
206             for (int k = 0; k < i; k++) {
207                 if(str.equals(students[k].getID().substring(0,6))){
208                     if(students[k].getLast()!=-1) {
209                         sum += students[k].getLast();
210                         count++;
211                     }
212                 }
213             }
214             if(count==0){
215                 System.out.println(str+" has no grades yet");
216             }
217             if(count!=0){
218                 System.out.println(str+" "+(int)Math.floor(sum/count) );
219             }
220         }
221     }
222     public static boolean isNumber(String str) {
223         if (str == null || str.trim().length() == 0) {
224             return false;
225         }
226         Pattern pattern = Pattern.compile("^\\d+$");
227         return pattern.matcher(str).matches();
228     }
229 }
230 
231 class Student {
232     private  String ID="";
233     private  String name;
234     private  Lesson[] lessons;
235 
236     private int last=-1;
237 
238     public Student( ) {
239         lessons =new Lesson[20];
240         for (int i = 0; i < lessons.length; i++) {
241             lessons[i]=new Lesson();
242         }
243     }
244     public Student(String ID, String name, Lesson[] lessons) {
245         this.ID = ID;
246         this.name = name;
247         this.lessons = lessons;
248     }
249     public Student(String ID, String name, Lesson[] lessons, int last) {
250         this.ID = ID;
251         this.name = name;
252         this.lessons = lessons;
253         this.last = last;
254     }
255     public String getID() {
256         return ID;
257     }
258 
259     public void setID(String ID) {
260         this.ID = ID;
261     }
262     public String getName() {
263         return name;
264     }
265     public void setName(String name) {
266         if(name.length()<10)
267             this.name = name;
268         else
269             System.out.println("wrong format");
270     }
271     public Lesson[] getLessons() {
272         return lessons;
273     }
274     public void setLessons(Lesson lesson) {
275         for (int i = 0; i < lessons.length; i++) {
276             if(lessons[i].getName().equals("")){
277                 lessons[i]=lesson;
278                 break;
279             }
280         }
281     }
282     public int getLast() {
283         return last;
284     }
285     public void setLast(int last) {
286         this.last = last;
287     }
288     public void indGrades(Lesson[] lessons2){
289         double sum=0;
290         boolean judge=false;
291         int count=0;
292         for (int i = 0;!lessons[i].getName().equals(""); i++) {
293             for (int i1 = 0;!lessons2[i1].getName().equals(""); i1++) {
294                 if(lessons[i].getName().equals(lessons2[i1].getName())){
295                     if(lessons[i].getNormal()!=-1&&lessons2[i1].getMethod().equals("考察")){
296                         System.out.println(ID+" "+name+" "+": access mode mismatch");
297                     }
298                     if (lessons[i].getNormal()==-1&&lessons2[i1].getMethod().equals("考试")) {
299                         System.out.println(ID+" "+name+" "+": access mode mismatch");
300                     }
301                     if (lessons[i].getNormal()==-1&&lessons[i].getEnd()!=-1&& lessons2[i1].getMethod().equals("考察")) {
302                         sum+=lessons[i].getEnd();
303                         count++;
304                     }
305                     if (lessons[i].getNormal()==-1&&lessons[i].getEnd()==-1&& lessons2[i1].getMethod().equals("考察")){
306                         count=-1;
307                     }
308                     if(lessons[i].getNormal()!=-1&&lessons2[i1].getMethod().equals("考试")){
309                         sum+=lessons[i].getNormal()*0.3+lessons[i].getEnd()*0.7;
310                         count++;
311                     }
312                     break;
313                 }
314                 if(lessons2[i1+1].getName().equals(""))
315                     judge=true;
316             }
317             if(judge)
318                 System.out.println(ID + " " + name + " :" + lessons[i].getName() + " does not exist");
319             judge=false;
320         }
321         if (count==0){
322             System.out.println(ID + " " + name +" did not take any exams");
323         }
324         else if(count>0){
325             this.last=(int)Math.floor(sum/count);
326             System.out.println(ID + " " + name +" "+(int)Math.floor(sum/count));
327         }
328     }
329 }
330 class Lesson  implements Comparable<Lesson> {
331     private String name="";
332     private  String nature="";//课程性质
333     private  String method="";//考察方式
334     private  int normal=-1;
335     private  int  end=-1;
336 
337     public Lesson() {
338     }
339     public Lesson(String name, String nature, String method, int normal, int end) {
340         this.name = name;
341         this.nature = nature;
342         this.method = method;
343         this.normal = normal;
344         this.end = end;
345     }
346 
347     public String getName() {
348         return name;
349     }
350 
351     public void setName(String name) {
352         if(name.length()<10)
353             this.name = name;
354     }
355 
356     public String getNature() {
357         return nature;
358     }
359 
360     public void setNature(String nature) {
361         this.nature = nature;
362     }
363 
364     public String getMethod() {
365         return method;
366     }
367 
368     public void setMethod(String method) {
369         this.method = method;
370     }
371 
372     public int getNormal() {
373         return normal;
374     }
375     public void setNormal(int normal) {
376         if(normal>=0&&normal<101)
377             this.normal = normal;
378         else
379             System.out.println("wrong format");
380     }
381 
382     public int getEnd() {
383         return end;
384     }
385 
386     public void setEnd(int end) {
387         if(end>=0&&end<101)
388             this.end = end;
389         else
390             System.out.println("wrong format");
391     }
392     @Override
393     public int compareTo(Lesson o) {
394         Collator cmp = Collator.getInstance(Locale.CHINA);
395         return cmp.compare(this.name, o.getName());
396     }
397 }
View Code

 

该部分为PTA6-1的代码显示,主要通过Arraylist容器对所需数据进行存储。随后对目标进行整理与 计算。 (注意:其中对Arraylist容器进行处理时要熟悉Arraylist类的相关方法,以便我们进行操作)

 

 1 import java.util.ArrayList;
 2 import java.util.List;
 3 import java.util.Scanner;
 4 import java.util.StringTokenizer;
 5 
 6 public class Main {
 7     public static void main(String[] args) {
 8         Scanner in = new Scanner(System.in);
 9         List<Student> list1 = new ArrayList<>();
10         String get = in.nextLine();
11         int time = 0;
12         while (!get.equals("end")) {
13             Student temp=new Student();
14             StringTokenizer st = new StringTokenizer(get, " ");
15             String first = st.nextToken();
16             String twice = st.nextToken();
17             int three = Integer.parseInt(st.nextToken());
18             temp.setID(first);
19             temp.setName(twice);
20             temp.setGrade(three);
21             list1.add(temp);
22             get=in.nextLine();
23         }
24         get = in.nextLine();
25         for (Student stu : list1) {
26             if (stu.getID().equals(get)) {
27                 System.out.println(stu.getID() + " " + stu.getName() + " " + stu.getGrade());
28                 time=1;
29                 break;
30             }
31         }
32         if (time == 0)
33             System.out.println("The student "+get + " does not exist");
34     }
35 }
36 class Student{
37     String ID;
38     String name;
39     int grade;
40 
41     public Student() {
42     }
43 
44     public Student(String ID, String name, int grade) {
45         this.ID = ID;
46         this.name = name;
47         this.grade = grade;
48     }
49 
50 
51     public String getID() {
52         return ID;
53     }
54 
55     public void setID(String ID) {
56         this.ID = ID;
57     }
58 
59     public String getName() {
60         return name;
61     }
62 
63     public void setName(String name) {
64         this.name = name;
65     }
66 
67     public int getGrade() {
68         return grade;
69     }
70     public void setGrade(int grade) {
71         this.grade = grade;
72     }
73 }

 第7次PTA主要考察的是HasMap容器的运用与处理。与之前不同的是需要注意HasMap的特定方法与之不同在实现过程中,需要区分菜单信息和订单信息格式上的不同,以免发生方法调用上的错误。在7-1的基础上,需要在设计方法来输入获取菜价信息和选取份额,因此可以构造一个新的类来实现这些方法。

class Lesson {
    String name;
    String nature;
    String method;
    int time;
    ArrayList<Integer>grade ;
    ArrayList<Double>value;

    public Lesson() {
        grade=new ArrayList<>();
        value=new ArrayList<>();
    }


    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getNature() {
        return nature;
    }

    public void setNature(String nature) {
        this.nature = nature;
    }

    public String getMethod() {
        return method;
    }

    public void setMethod(String method) {
        this.method = method;
    }


    public ArrayList<Integer> getGrade() {
        return grade;
    }

    public void setGrade(int grade) {
        this.grade.add(grade);
    }

    public int getTime() {
        return time;
    }
    public void setTime(int time) {
        this.time = time;
    }

    public ArrayList<Double> getValue() {
        return value;
    }

    public void setValue(ArrayList<Double> value) {
        this.value = value;
    }

}

第8次PTA再次考察学生对容器的掌握与运用,总的来说只需对原有的类进行成员变动就能

其实无压力的应对了。

采坑心得:

  作为新手,在编写代码的过程中终会遇到许许多多的问题,而我们能做的就是做好总结并且理解并改正。

   对格式错误的数据的处理问题:在读入并判断输入数据格式时,要注意对错误格式的信息进行忽略并报错,否则会导致程序崩溃。

  数组下标越界问题:在删除订单信息时,要注意数组下标是否越界,否则会导致程序崩溃。

  对不同格式信息的区分问题:在读入数据后,格式的判断一定要严谨,否则会导致数据的丢失。

  类的结构过于混乱:在编写程序时一定要注意程序的结构是否可拓展和可读,避免后期维护产生问题。

在解题过程中,我遇到了以下主要困难:

  对时间类的使用不够熟练:在解决储存每桌对应的时间时,我发现测试样例中时间的格式不统一,时而是单数时而是双数,

 导致使用的时候出现报错。

    • SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH/mm/ss");
      Date date = new Date();
      date= sdf.parse(time);
      • 算法的实现不够高效:对于多桌菜的情况,处理大量数据时因为循环结构过多导致耗时很长,无法达到预期结果。
      • 编码能力有待提高:在解题过程中,我发现自己编码能力还有待提高,主要体现在代码的可读性和可维护性上,难以在原有的结构基础上拓展新的功能。因此,需要加强对编码技巧的掌握,提高代码的可读性和可维护性。

      改进建议:

      • 其实对于时间类需要充足的时间理解和练习,在寻找上述中提到的时间格式问题的解决方法时,我在网络上领教到了一种较为方便的解决方法:
      • 可以将data类转化为Instant类,再由时区转换为LocalDateTime类,这样就可以避免因为输入格式的不统一造成的错误了。仍未解决的问题:

      1 Date date = new Date();
      2             date= sdf.parse(time);
      3             Instant instant = date.toInstant();
      4             ZoneId zone = ZoneId.systemDefault();
      5             tables[table_count].time= LocalDateTime.ofInstant(instant, zone);
      • 对于提高代码可拓展性上,我将原本的很多功能重构成了方法,也增加了类的使用频率,让代码整体的结构更加紧密和可拓展。
      • 对于格式的判断,我率先想到的就是判断数据的某个元素是否可以转化为数字,以将不同的数据分割开处理,因此,我构造了isNumeric方法来判断是否可以转化成数字。 复制代码
        public static boolean isNumeric (String string) {
                int intValue;
                try {
                    intValue = Integer.parseInt (string);
                    return true;
                } catch (NumberFormatException e) {
                    return false;
                }
            }
        复制代码
        • 但是,这个方法并不是很好,一方面每个数据都要判断一遍导致运行速度大大降低,另一方面可扩展性不高,后期添加新的功能时需要大量改动原有代码。

        • 针对删除订单信息的方法中出现的数组越界问题,我引用了新的计数变量count,来记录数组的长度,从而防止数组下标越界的问题
        • 其实可以直接调用数组的lenth方法。
        • 复制代码
          boolean delARecordByOrderNum(int orderNum,int count){
                      int i=0,j=0,flag=0;
                      for(i=0;i<count;i++){
                          if(records[i].orderNum==orderNum){
                              for(j=i;j<count-1;j++){
                                  records[j]=records[j+1];
                              }
                              flag++;
                          }
                      }
                      if(flag==0){System.out.println("delete error;");return false;}
                      return true;
                  }
          复制代码
          • 仍未解决的问题:

            • 即使优化了代码的结构,代码的运行效率依旧达不到预期的水准,个人猜测是由于判断输入数据格式的方法太过笨拙。
            • 使用不可拓展容器来储存变量,有超出容器容量的风险,应当换用ArrayList等容器。这样不仅解决了容器大小的问题,又可以让数据的增删改查更加方便。
            • 由于胡乱的增加类,导致类与类的关系变得混乱,应当将Table类与Order类结合起来,可以增加代码的可读性。

            总结:

              个人感觉本次的题目集对与刚上手的学生来说还有很大难度,此次对于刚开始接触Java的同学来说还是有很大难度的,需要兼顾语法的同时对题目的算法有不错的理解。不然很容易出现欠缺考虑的情况。但通过这次的题目也可以很好人让我们深入了解面向对象设计语言该如何编写,让我们更快的了解Java运行方式。。总体而言,这套菜单系统让我学到了很多新知识,并且使我对代码结构的理解更加深刻,意识到了代码可拓展性的重要。

标签:题目,String,int,PTA,ID,blog,new,public,name
From: https://www.cnblogs.com/shinehui/p/17512478.html

相关文章

  • BLOG3
    importjava.text.Collator;importjava.util.ArrayList;importjava.util.Collections;importjava.util.Comparator;importjava.util.Scanner;publicclassMain{privatestaticfinalintCOURSE_RECORD_TYPE=1;privatestaticfinalintSCORE_RECORD_......
  • Blog-3
    //课程成绩统计程序importjava.util.*;classCourse{privateStringname;privateStringnature;privateStringassessment;publicCourse(Stringname,Stringnature,Stringassessment){this.name=name;this.nature=natur......
  • PTA题目集6-8总结
    (1)前言题目集6只有一个课程成绩统计程序-1,难点总体来说中等,考察的也是对java类的定义和使用,以及如何设计能使程序往后修改方便,可以根据给出的类图来进行设计。题目集7中有上一次程序的进阶版课程成绩统计程序-2,相比于之前添加了实验这一课程性质,总的来说改变不大,只需要在......
  • BLOG-3
    前言之前发布的6-8次PTA题目集依旧保持了之前一贯的特点:题目数量少,每道题目的难度相对大,题目的分数也非常的集中(基本集中在课程成绩统计程序系列的三道题目上)。其中,第六次PTA作业只有课程成绩统计程序-1这一道题目,100分完全由这一道题目囊括;第七次PTA作业共四道题目,课程成绩统计......
  • PTA题目集6~8
    (1)前言前面的点菜系统结束后,以为终于解脱了,没想到是另一个噩梦。以下是PTA6到8的相关问题。题目集6,只有一题,课程成绩统计程序-1,难度嘛,中等偏上吧,至少对我来说,因为我接口基本没学懂。题目集7,有四题,容器-HashMap-检索,容器-HashMap-排序,课程成绩统计程序-2,动物发声模拟器(多态)。前面......
  • pta题目集6~8次总结性blog
    一、前言总结三次题目集的知识点、题量、难度等情况第六次题目集开始了新的迭代系统,万恶的点菜系统终于结束了,取而代之的是课程成绩统计程序,虽说更换了迭代系统但是感觉换汤不换药,很多要用到的知识点和内容和菜单非常类似,甚至是比点菜系统要简单很多(听说是不让平时分那么难看),万......
  • blog-3
    一、前言第六次题目集中有一道题,题目有一定的难度,是课程成绩统计系统-1,他对于各个类之间的嵌套关系以及ArrayList等数据的储存和利用有一定的涉及。第七次题目集的难度有一定的减少,因为一共有四道题,第一二和四题较简单,第三题就是课程统计系统-2,对于我们有一点点不友好,它......
  • 面向对象程序编程6-8次PTA题目集(成绩计算系列)的总结性Blog
    1.对之前发布的6-8次PTA题目集(成绩计算系列),内容要求如下:(1)前言:总结之前所涉及到的知识点、题量、难度等情况第六次PTA题目集:知识点:此次PTA题目仅只有这一个题目,主要考的内容就是对类的使用(类似现实,对有关联的各个数据合并在一起,便于一起使用),运用正则表达式(比较苦难使用,要记住那......
  • 防火墙&&firewalld&&iptables
    防火墙&&firewalld&&iptables目录防火墙&&firewalld&&iptables一、firewalld1.centos8查看防火墙开放的端口2.开通5432端口3.源地址为"172.30.3.19",目标端口为6379,使用TCP协议,将连接请求拒绝(reject)。4.重启生效二、iptables1.查看当前的防火墙规则:2.清除所有防火墙规则:3.常用......
  • 6-8次PTA题目集总结
    6-8次PTA题目集总结前言第6次题目集知识点:对象和类的创建和应用,字符串的创建和应用。总共有1题,难度偏低,比较基础。第7次题目集知识点:HashMap的创建和使用,多态,对象和类的创建和应用,字符串的创建和应用。总共有4题,难度中等。第8次题目集知识点:ArrayList的创建和使用,接口的......