java第二周作业

一. 本周学习总结

  • 引用:类似c语言的指针
  • String类型:字符串类型
  • new:使用new会创建一个新的数据,所以就算内容相同,与旧的那个也不相等(不==)
  • 字符串常量池
  • 自动装箱:把一些基本类型转换成Integer型
  • 自动拆箱:与装箱相反
  • 一维数组:intArr语句。java中数组有.length所以遍历比较方便。
  • 多维数组:二维数组~~~
  • 动态数组:ArrayList

二. 书面作业

1.String-使用Eclipse关联jdk源代码

1.1 查看String对象的源代码(截图),分析String使用什么来存储字符串?

答:1122567-20170923020333509-1793135623.png
string使用栈来存储字符串。

1.2 分析其构造函数public String(char value[])作用?

答:传入一个char型的数组(字符数组),生成string(字符串)。

1.3 阅读public String replace(char oldChar, char newChar)方法的代码,回答String的不可变性在该函数中如何体现?(重点)

答:public String replace(char oldChar, char newChar)的作用是在字符串中用新的字符替换旧的字符。因为字符串是不可变的,所以我认为这个函数应该是创造了一个新的字符串,而不是简单的替换了单个字符。

1.4 简述String与字符数组的关系,使用字符数组就可以处理字符串,为什么还需要String呢?

答:String可以用str.toCharArray()转换成字符数组,虽然同样的内容都可以使用String或者字符数组,但是因为字符串比较常用,而字符数组如果用来处理字符串的话会比较麻烦也比较占用空间,所以多出一个String型,会使得java中很多函数更容易得到创造和体现。

2.StringBuilder

2.1 结合PTA -2(StringBuilder) ,说明为什么频繁修改字符串时,应该使用StringBuilder而不是String?

答:因为字符串是有不可变性的,用String对字符串进行修改的时候要一直生成新的string对象,而使用SyringBuilder的相关函数操作的时候修改了 string的值,而没有创建新的对象。否则太占空间也太耗时间了。

2.2 阅读jdk文档,查询StringBuilder的append(char[] str)方法功能是什么?试分析StringBuilder内部使用什么来存放字符?调用StringBuilder的append(char[] str)方法时,是如何实现添加字符的操作?
  • append(char[] str)的功能是追加新的字符串到StringBuilder的末尾。
  • StringBuilder内部使用堆。
  • 操作方法:StringBuilder.append("")

3.字符串与字符串池

3.1 尝试使用字符串池的概念解释如下程序段输出结果,并回答这段代码创建了几个字符串对象:

String str1 ="hi", str2="hi";
String str3 = new String(str1);
System.out.println(str1==str2);
首先,输出结果为true
这段代码创建了2个对象,因为有字符串池,所以str1和str2指向的是同一个对象,而str3使用了new,创建了一个新的对象,总共两个对象。

3.2 重点:对基本类型我们可以使用==比较两个值是否相等,对于引用类型(如String, Integer、数组等)为什么不能使用==比较?应该怎样比较他们的值是否相等呢?
  • 当创建两个string对象,虽然可以有相同的值,但是内存中的地址是不同的,所以用==进行比较的时候会出现错误的结果。
  • 应该用equals

4.Wrapper(包装类)

4.1 Integer i = 100;//100是基本类型,i是引用类型,为什么可以将100赋值给i?Integer x = 100; int y = x+1;x++;这一串命令中包含了些什么操作?
  • 在JDK5.0之后,默认把 Integer i = 100;当作Integer i=new Integer(100),这叫自动装箱。
  • 自动装箱;自动拆箱;x++是先拆箱成Int型,然后加1,再装箱成Integer类型。
4.2 Java为什么有了基本数据类型,还需要其包装类呢?包装类能给我们带来什么好处呢?
  • 有时候我们需要把基本型别包装成对象来使用。
  • 可以利用reference来进行操作了。

5.实验总结

5.1 结对编程实践:使用结对编程的方式完成本周编程题目,即两个人同时合作完成实验题目。

队友是华辉,同个宿舍的。感觉效果不是很好,讨论还可以,但是合作编码就有问题了,思路容易断断续续的,感觉还是个人完成,不懂的找别人问或者百度的方式比较好。这种合作完成的方式,感觉1+1别说>2了,直接变成<1了。
1122567-20170923015028321-475918689.jpg
1122567-20170923015034884-287097422.jpg
1122567-20170923015040665-130980635.jpg

5.2 PTA-1综合小测验

四个部分:

  • fib部分:用递归的方法写出斐波那契数列,调用函数,打印。
  • sort部分:输入数字,存入字符串数组,用Arrays.sort()函数将其排序,最后输出。
  • search:主要使用函数Arrays.binarySearch进行search,然后按题目要求进行输出。
  • getBirthDate:主要使用.substring获取每一段需要的字符串(年、月、日),按照要求格式进行输出即可。
5.3 PTA-3身份证排序。并回答:使用sort2方法进行排序可以对出生年月日进行升序排序,如果现在有需要对其进行降序排序,或者按照其中的出生月份排序,怎么解决呢?

这题内容比较多,主要是分为两个部分:

  • sort1:第一部分比较简单,就是建立一个新的字符串数组,把原来的身份证截取进去,然后使用Arrays.sort()进行升序输出就好了。
  • sort2:第二部分比较复杂,首先和第一部一样先建立一个新的字符串数组,然后截取需要用来排序的部分存入新的字符串数组,利用冒泡法排序(具体实行步骤比较繁杂,文字很难描述,大概就是每次排序都需要把字符串转换成数字,然后才能对其进行比较,判断是否应该把身份证ids的次序进行交换)
    实现降序排序只要改变冒泡法中的判断条件就好了。
    想按照其中的出生月份排序,只需要在步骤二中把字符串数组截取的部分改成月份那部分就好了。
5.4 PTA-4动态数组

这题首先要创造二维数组,通过老师上课提供的getDynamicMatrix函数就可以创建此题需要的二维数组,然后利用两个for的嵌套循环把九九乘法表的信息存入字符串数组,按题目要求对其进行输出就可以了。
注意事项:为了验证确实使用了二维数组,打印完乘法表之后必须使用Arrays.deepToString进行输出。

5.5 (重点:小测题目)PTA-8 ArrayList入门。并回答:为什么有了数组还要使用ArrayList?

这题主要是ArrayList的使用:

  • 第一次输入:使用strList.add()把字符串输入到动态数组中,用strList.add(0,"begin")strList.add("end")分别在strList头部新增一个begin,尾部新增一个end,然后进行输出。
  • 第二次输入:输入字符串str,使用strList.contains(str)判断其是否含有字符串str;使用strList.indexOf(str)寻找其开始的下标,使用strList.lastIndexOf(str)寻找str在动态字符串数组中的最后出现位置;用strList.remove(0)移除第1个(下标为0)元素,用strList.get(0)输出第1个(下标为0)元素,输出整个字符串数组。
  • 第三次输入:输入字符串str1,使用strList.set(1,str1),将第2(下标为1)的元素设置为字符串str1,然后进行输出。
  • 第四次输入:输入字符串str2,用for循环遍历动态字符串数组(用strList.size()判断字符串的个数),用.indexOf(str2)判断字符串中是否包含str2,若包含将其保存进新的动态字符串数组,燃后将其输出;分别使用.indexOf(c).remove(n)移除第一个和str相等的元素,进行输出;用strList.clear();清空动态字符串数组,用.size()查看是否成功清空(显示动态字符串数组的size为0),用.isEmpty()查看是否成功清空。
    ArrayList就是动态数组,它想比普通的数组来说可以灵活地设置数组的大小,不浪费空间。

三. 码云及PTA

1. 码云代码提交记录

在码云的项目中,依次选择“统计-Commits历史-设置时间段”,然后搜索并截图
1122567-20170923015432478-896441487.png
1122567-20170923015439650-1882610817.png

2. 截图题集“Java基本语法”PTA提交列表

  • 排名:
    1122567-20170923015551853-87687558.png
  • 列表:
    1122567-20170923015610103-611490840.png
    1122567-20170923015616993-1863882726.png
    1122567-20170923015623790-266407328.png

3. 使用老师发的jar程序统计每周的代码量

周次行数新增行数文件数新增文件数
230630677

转载于:https://www.cnblogs.com/yellower/p/7579407.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java测试题2》<br><br>一、 选择<br>1.欲构造ArrayList类的一个实例,此类继承了List接口,下列哪个方法是正确的 ? B<br>A ArrayList myList=new Object();<br>B List myList=new ArrayList();<br>C ArrayList myList=new List();<br>D List myList=new List();<br>2.paint()方法使用哪种类型的参数? A<br>A Graphics<br>B Graphics2D<br>C String<br>D Color<br>3.指出正确的表达式 D<br>A byte=128;<br>B Boolean=null;<br>C long l=0xfffL;<br>D double=0.9239d;<br>4.指出下列程序运行的结果 D<br>public class Example{<br>String str=new String("good");<br>char[]ch={'a','b','c'};<br>  public static void main(String args[]){<br>    Example ex=new Example();<br>    ex.change(ex.str,ex.ch);<br>    System.out.print(ex.str+" and ");<br>    Sytem.out.print(ex.ch);<br>  }<br>  public void change(String str,char ch[]){<br>    str="test ok";<br>    ch[0]='g';<br>  }<br>}<br>A good and abc<br>B good and gbc<br>C test ok and abc<br>D test ok and gbc<br>5.运行下列程序, 会产生什么结果 B<br>public class X extends Thread implements Runable{<br> public void run(){<br>  System.out.println("this is run()");<br> }<br> public static void main(String args[])<br> {<br>  Thread t=new Thread(new X());<br>  t.start();<br> }<br>}<br>A 第一行会产生编译错误B 第六行会产生编译错误C 第六行会产生运行错误D 程序会运行和启动6.要从文件" file.dat"文件中读出第10个字节到变量C中,下列哪个方法适合? A<br>A FileInputStream in=new FileInputStream("file.dat"); in.skip(9); int c=in.read();B FileInputStream in=new FileInputStream("file.dat"); in.skip(10); int c=in.read();C FileInputStream in=new FileInputStream("file.dat"); int c=in.read();D RandomAccessFile in=new RandomAccessFile("file.dat"); in.skip(9); int c=in.readByte();7.容器被重新设置大小后,哪种布局管理器的容器中的组件大小不随容器大小的变化而改变? B<br>A CardLayoutB FlowLayout<br>C BorderLayout<br>D GridLayout<br>8.给出下面代码: C<br>public class Person{<br>  static int arr[] = new int[10];<br><br>  public static void main(String a[])<br>  {<br>   System.out.println(arr[1]);<br>  }<br>}<br>那个语句是正确的?<br>A 编译时将产生错误;<br>B 编译时正确,运行时将产生错误;<br>C 输出零;<br>D 输出空。<br>9.哪个关键字可以对对象加互斥锁? B<br>A transient<br>B synchronized<br>C serialize<br>D static<br>10.下列哪些语句关于内存回收的说明是正确的? B<br>A 程序员必须创建一个线程来释放内存;<br>B 内存回收程序负责释放无用内存<br>C 内存回收程序允许程序员直接释放内存<br>D 内存回收程序可以在指定的时间释放内存对象<br>11.下列代码哪几行会出错: c<br>1) public void modify() {<br>2) int I, j, k;<br>3) I = 100;<br>4) while ( I > 0 ) {<br>5) j = I * 2;<br>6) System.out.println (" The value of j is " + j );<br>7) k = k + 1;<br>8) I--;<br>9) }<br>10) }<br>A line 4<br>B line 6<br>C line 7<br>D line 8<br>二、多项选择<br>1.执行下列代码后,哪个结论是正确的 String[] s=new String[10]; BD<br>A s[10] 为 "";<br>B s[9] 为 null;<br>C s[0] 为 未定义<br>D s.length 为10<br>2.下面的表达式哪个是正确的?AE<br>A String s="你好";int i=3; s+=i;<br>B String s="你好";int i=3; if(i==s){ s+=i};<br>C String s="你好";int i=3; s=i+s;<br>D String s="你好";int i=3; s=i+;<br>E. String s=null; int i=(s!=null)&&(s.length>0)?s.length():0;<br>3.选出合理的标识符AC<br>A _sys1_lll<br>B 2mail<br>C $change<br>D class<br>4.哪个布局管理器使用的是组件的最佳尺寸( preferred size) AE<br>A FlowLayout<br>B BorderLayout<br>C GridLayout<br>D CardLayout<br>E.GridBagLayout<br>5.下列哪个方法可用于创建一个可运行的类?AE<br>A public class X implements Runable{ public void run(){ ......} }<br>B public class X implements Thread{ public void run(){ ......} }<br>C public class X implements Thread{ public int run(){ ......} }<br>D public class X implements Runable{ protected void run(){ ......} }<br>E.public class X implements Thread{ public void run(){ ......} }<br>6.下面哪个方法可以在任何时候被任何线程调用?DEF<br>A notify()<br>B wait()<br>C notifyAll()<br>D sleep()<br>E.yield()<br>F.synchronized(this)<br>7.构造BufferedInputStream的合适参数是哪个? AC<br>A BufferedInputStream<br>B BufferedOutputStream<br>C FileInputStream<br>D FileOuterStream<br>E. File<br>8.下列说法正确的是 BC<br>A java.lang.Clonable是类<br>B java.lang.Runnable是接口<br>C Double对象在java.lang包中<br>D Double a=1.0是正确的java语句<br>9.指出正确的表达式AB<br><br>B Double a=new Double(1.0);<br>C byte a = 340;<br>D Byte a = 120;<br>10.定义一个类名为"MyClass.java"的类,并且该类可被一个工程中的所有类访问,那么该类的正确声明应为:CD<br>A double a=1.0;<br>A private class MyClass extends Object<br>B class MyClass extends Object<br>C public class MyClass<br>D public class MyClass extends Object<br>11.指出下列哪个方法与方法public void add(int a){}为合理的重载方法。 CD<br><br><br>A public int add(int a)<br>B public void add(long a)<br>C public void add(int a,int b)<br>D public void add(float a)<br>12.如果下列的方法能够正常运行,在控制台上将显示什么? ACD<br><br>public void example(){<br>  try{<br>    unsafe();<br>    System.out.println("Test1");<br>    }<br>    catch(SafeException e)<br>    {System.out.println("Test 2");}<br>  finally{System.out.println("Test 3");}<br>  System.out.println("Test 4");<br>}<br>A Test 1<br>B Test 2<br>C Test 3<br>D Test 4<br>13.下列哪些情况可以终止当前线程的运行? ABD<br>A 抛出一个例外时。<br>B 当该线程调用sleep()方法时。<br>C 当创建一个新线程时。<br>D 当一个优先级高的线程进入就绪状态时。<br>三、 填空题<br>1.执行下列代码后的结果是什么? int x,a=2,b=3,c=4; x=++a+b+++c++;<br>2. 包包含了Collection的接口和类的API<br>.main方法的声明格式包括<br>4.下列程序中构造了一个SET并且调用其方法add(),输出结果是<br>public class A{<br>public int hashCode(){return 1;}<br>public Boolean equals(Object b){return true}<br>public static void main(String args[]){ Set set=new HashSet();<br>set.add(new A());<br>set.add(new A());<br>set.add(new A());<br>System.out.println(set.size());<br>}<br>}<br>5.下列程序的运行结果是<br>class A{<br>class Dog{<br>  private String name;<br>  private int age;<br>  public int step;<br>  Dog(String s,int a){<br>   name=s;<br>   age=a;<br>   step=0;<br>   }<br>  public void run(Dog fast){<br>  fast.step++;<br>  }<br>}<br><br>  public static void main (String args[]){<br>  A a=new A();<br>  Dog d=a.new Dog("Tom",3);<br>  d.step=25;<br>  d.run(d);<br>  System.out.println(d.step);<br>  }<br>}<br><br>答案::填空第1题<br>x=10,a=3,b=4,c=5<br>填空第2题<br>java.util<br>填空第3题<br>(public )(static )(void)(main)(String args[])<br>填空第4题<br>1<br>填空第5题<br>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值