zoukankan      html  css  js  c++  java
  • Java 第二周总结

    1.本周学习总结

    (1)斐波那契函数

    public static int fibonacci(int n)//斐波那契函数
    {
    	if(n<=2)
    	{
    		return 1;
    	}
    	else
    	{
    		return fibonacci(n-1)+fibonacci(n-2);
    	}
    }
    

    (2)关于Arrays.sort()

    PS:后来有问其他人,好像这个就是这样,不能直接对字符串数组排序,必须要转换成整形。

    • 由于这周的作业一些地方涉及排序,所以对这个函数就有大量的引用。在写代码的过程中,发现了一些小问题,不知道是bug还是他本身的设定就是这样,又或者是我的使用方法的问题。由于网上查了很多都没有提到,所以想想还是写一下吧。
    • Arrays类中的sort()使用的是“经过调优的快速排序法”,能快速的对对象进行升序排序。要对基础类型的数组进行降序排序,需要将这些数组转化为对应的封装类数组。
    • 但是在对字符串数组的排序中,发现了几个问题。
      • 当目标字符串数组内的几个字符串长度不一的时候,没法进行全部排序,只能对相同位数的排序。情况如下:

    但是同样位数的时候,排序正常,负数的-算做一位


    以上运行结果均为同一段代码,没有做任何修改。代码如下:

    Scanner in1=new Scanner(System.in);
    String s=in1.nextLine();					
    String[] ss=s.split(" ");
    Arrays.sort(ss);
    System.out.println(Arrays.toString(ss));
    

    后来考虑是不是因为我是由控制台输入,然后再转为字符串数组,影响了结果。但是后来测试定义静态的字符串数组,也是同样的情况。

    代码如下:(我也不知道这个函数到底好不好用了......)

    String[] aaa={"255","3","11561","-6"};
    Arrays.sort(aaa);
    System.out.println(Arrays.toString(aaa));
    

    (3)String[] sea=search.split(" "); 以空格为间隔分解字符串,建立字符串数组

    (4)int imput=Integer.parseInt(imput1); 字符串imput1转换成整形imput

    (5) System.out.println(b1.add(b2)); 加法

        System.out.println(b1.multiply(b2));  乘法
    

    (6)枚举

    (7)大数处理 BigInteger和BigDecimal,分别表示大整数类和大浮点数类

    int a=3;
           BigInteger b=BigInteger.valueOf(a);
         则b=3;
             String s=”12345”;
           BigInteger c=BigInteger.valueOf(s);
          则c=12345;
    
    2.add(); 大整数相加
       BigInteger a=new BigInteger(“23”);
       BigInteger b=new BigInteger(“34”);
    a.      add(b);
    
    3.subtract(); 相减
    4.multiply(); 相乘
    5.divide();    相除取整
    6.remainder();取余
    7.pow();   a.pow(b)=a^b
    8.gcd();   最大公约数
    9.abs(); 绝对值
    10.negate();取反数
    11.mod(); a.mod(b)=a%b=a.remainder(b);
    12.max(); min();
    13.punlic int comareTo();
    14.boolean equals(); 是否相等
    15.BigInteger构造函数:
      一般用到以下两种:
       BigInteger(String val);
    将指定字符串转换为十进制表示形式;
       BigInteger(String val,int radix);
    

    2.书面作业

    1.使用Eclipse关联jdk源代码(截图),并查看String对象的源代码?简单分析String对象的设计思路。

    #####之前一直没能连上源码库,按照百度的方法也不行,总感觉哪里怪怪的。同学说她重装了JDK,突然点醒了我。因为我用的jdk和eclipes不是安装在同一个地方,所以换了种方法连接,果然有效。 #####String的源码,感觉像在看C语言的程序,很多是一些很基础的语句判断,通过函数调用我们可以很方便的使用

    ![](http://images2015.cnblogs.com/blog/1109779/201702/1109779-20170228213142157-1080545814.png)

    2.为什么要尽量频繁的对字符串的修改操作应该是用StringBuilder而不是String?

    • 首先,字符串对象一旦建立,就无法更改对象中的任何内容,如果频繁的对字符串做修改操作,会产生大量的新的字符串对象。
    • StringBuilder每次append()调用过后,都会返回原有的StringBuilder对象,方便进行下一次的操作。这个程序片段只产生一个StringBuilder对象,只进行一次输出,效果上比最初看到的程序片段好得多。
    • StringBuilfer对象之后可以直接使用他们的toString方法来得到String。关于效率问题,Java的官方文档有提到说使用StringBuilder的toString方法会更快一些。

    3.比较两个字符串的值是否相等?为什么不能用==直接进行比较?

    • Java是一种面向对象的语言,==比较的是字符串池,而不是比较内容。
    • 一般来说,以" "包括的字符串,不论在程序代码中出现几次,只要内容相同,JVM都只会把他放在一个字符串池中维护。eg: String =name1="Justin"
    • 用" "写下的字符串称为字符串常量,eg: String name 2=new String("Justin")因为new,一定是建立新对象,所以都是新建的string实例。

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

           String str1 ="hi", str2="hi";
           String str3 = new String(str1);
           System.out.println(str1==str2);
    
    • 输出结果:true

    这段代码一共创建了两个字符串对象,str1和str2都是在同一个字符串池里的同一个"hi",str3单独建立一个对象"hi"

    如果代码改成下面这样: ``` String str1 ="hi", str2="hi"; String str3 = new String(str1); System.out.println(str1==str3); ``` - 那么输出结果为false ###5.Integer i = 100;//100是基本类型,i是引用类型,为什么可以将100赋值给i - int与integer的区别从大的方面来说就是基本数据类型与其包装类的区别:ing是基本类型,可以直接存数据,如题中的100。而integer是对象,用一个引用指向这个对象。 - int 和Integer都可以用来表示某一个数值,但是不能够互用,因为他们是两种不同的数据类型 - 所以```Integer i = 100``` 在编译的时候被翻译成 Integer i=Integer.valueOf(i)l ###6.尝试分析下面代码输出结果 ``` Integer i1 = 127;Integer i2 = 127; i1 == i2;//true of false? Integer i1 = 128;Integer i2 = 128; i1 == i2;//true of false ``` - 结果分别为 true 和 false - 因为127在-128~127之间,在IntgerCache.low与IntgerCache.high的范围内,所以相同。但是128超出这个范围了,所以会建立一个Integer实例。但是两个数都分别建立了一个实例,用的又是==,所以结果自然是false - 综上,比较是否相等的时候,还是使用```equals()```比较保险。 ###7.package与javac、 java、 -classpath、 -d在``` com.ibm```包中编写 StringUtil类,内有一方法在`edu.jmu`包中编写Main类,调用com.ibm.StringUtil的foo1方法 ``` public static void foo1(){ System.out.println(StringUtil.class+" method:foo1"); } ```

    7.1 尝试用命令行进行编译并运行,截图

    7.2 将生成的StringUtil.class放到d盘的lib目录下,将Main.class在d: est目录下,尝试命令行下运行,截图。

    7.3 Eclipse中源代码放在哪个目录、class文件放在哪个目录。在Eclipse项目中按一下ctrl+f11就可以直接运行Main,尝试分析背后实现的原理。

    • 源代码放在scr目录下,但是eclipse有时连接的源码库并不是和他放在同一个文件夹里,所以具体位置还是看具体JDK安装的地方。
    • 运行main就是通过编译.java文件,得到字节码文件。然后找到字节码文件,运行。

    8.自己在这门课的目标与计划

    • 请描述一下你的技术基础
      • 只会学过的语言,虽然在看python,但由于基本没怎么用,所以约等于不会。写的代码行数在最近呈直线增长,以前没这么大的代码量。
    • 一周准备花多少时间在这门课上?一周准备写多少行代码?采用怎样的学习方式?遇到困难打算怎样解决?
      • 这周几乎所有时间都花这门课上了......从码云的提交上就能看出来,这还不包括第一题一直没写完所以一直没提交的。写的代码我也不知道有多少行,反正写了删,删了写。遇到困难首先百度= =,说不定以后就是首先谷歌了。百度实在解决不了的,再和同学讨论。其实和同学讨论我觉得挺好的,有时候可以少走很多弯路,就是怕已经山路十八弯了,她才把你拉回正途上......
    • 关于这门课的smart目标
      • 目标啊......能够通过考试吧......我觉得我是那种非常不擅长考试的人,自从C语言挂科之后就已经没什么其他追求了

    3.码云

    4.PTA实验总结

    • 排序很麻烦,尤其是用Arrays.sort()排序感觉更麻烦了......总是有数不清的bug,到最后还不如写个冒泡省时间
    • 关于Scanner in=new Scanner(System.in); 在第二题的时候,明明答案没错,但是PTA就是不给通过,说是答案错误。愣是找了好久的问题,终于是靠同学的一份已经通过的代码找到了问题所在。
    Scanner in=new Scanner(System.in);
    while(true){}
    

    其实是比较耗资源,但是PTA就是不给过。。。。。

    while(true){
        Scanner in=new Scanner(System.in);
    }
    
    • 调了好久的格式结果不能用,,,,还是放上来吧,不要浪费了
    
    				for(int y=0;y<=x;y++){
    					if(x==0)
    					{
    						System.out.printf("[[");
    						System.out.print(a[x][0]);
    						System.out.printf("]");
    						System.out.printf(",");
    						
    						y=N;
    					}
    					else{
    						if(y==0){
    							System.out.printf("[");
    						}
    						System.out.print(a[x][y]);
    						if(y==N-1){
    							System.out.printf("]");
    						}
    						if(y!=x)
    						{
    							System.out.printf(",");
    						}
    						
    						while(y==x){
    							System.out.printf("]");
    							if(x!=N-1)
    							{
    								System.out.printf(",");
    							}
    							break;
    						}
    					}
    					
    				}
    
    			}
    
    • 总之写代码用半个小时,提交猜套路大概还要半个小时的样子......第一题提交了两三天了,最后还是只有两分。和已经过了的同学代码做对比,有些地方简直改的都快复制粘贴了,但是分点部分还是评判为答案错误。我怀疑这个是连锁反应的吧......总之,我觉得第一题写的是没什么问题的,但是,两分的我们简直是那个排名表上的一股清流啊......夹在一堆9分里面。
    • 比起上周的绝望,嗯......这周不是很绝望了,但是一周的生活除了代码还是代码。因为写代码总钻牛角尖,所以写的属于比较慢的那种,从周二晚上开始就基本没停过,感觉人生除了敲代码已经没什么其他事情了。最后总结,和PTA斗争好累......就这样。
  • 相关阅读:
    INode满的处理方法
    分布式转码集群思路
    FreeBSD Set a Default Route / Gateway
    ssh遇到port 22:No route to host问题的解决方法
    debian 开启SSH
    virsh 查看信息
    virsh console配置
    virsh console hangs at the escape character “^]”
    virt-install命令---详解
    kmv 学习笔记 工具
  • 原文地址:https://www.cnblogs.com/ycll/p/6478457.html
Copyright © 2011-2022 走看看