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斗争好累......就这样。
  • 相关阅读:
    032 Gradle 下载的依赖jar包在哪?
    031 can't rename root module,Android Studio修改项目名称
    030 Cannot resolve symbol'R' 问题解决汇总大全
    029 Android Studio层级显示目录文件
    028 You are about to commit CRLF line separators to the Git repository.It is recommended to set the core. autocrlf Git attribute to true to avoid line separator issues If you choose Fix and Comit ,
    027 【Android基础知识】Android Studio 编译慢及 Adb connection Error:远程主机强迫关闭了一个现有的连接
    026 Android Studio 和Gradle版版本对应关系
    025 Cause: org.jetbrains.plugins.gradle.tooling.util.ModuleComponentIdentifierIm
    024 Android Studio上传项目到Github 最全记录
    023 解决AndroidStudio下载gradle慢的问题
  • 原文地址:https://www.cnblogs.com/ycll/p/6478457.html
Copyright © 2011-2022 走看看