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:\test目录下,尝试命令行下运行,截图。
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斗争好累......就这样。
Java 第二周总结的更多相关文章
- Java第二周作业
Java第二周作业 本周作业: 参考http://www.cnblogs.com/rocedu/p/7911138.html 学习第二三章视频 参考http://www.cnblogs.com/roc ...
- 2018-03-11 20165235 祁瑛 Java第二周考试总结
20165235 祁瑛 Java第二周考试总结 课后习题p16 代码编写 class Person { void speakHello (){ System.out.print("nin h ...
- java第二周的作业
package java第二周学习; import javax.swing.JOptionPane; public class 数学题 { private int a; private int b; ...
- 20165210 Java第二周学习总结
20165210 Java第二周学习总结 教材学习内容总结 - 第二章学习总结 标识符与关键字: 重点在50个关键字 标识符并不能是关键字 标识符的第一个字符不能是数字字符 Unicode字符集简单了 ...
- 201521123093 java 第二周学习总结
201521123093 <java程序设计> 第二周学习总结 一.第二周学习总结 答:(1)关于进一步使用码云管理代码,本周才真正学会了如何将Eclipse里的代码上传到码云中,并且能够 ...
- 20165326 java第二周学习笔记
学习笔记 一.理论学习 基本数据类型与数组 标识符的第一个字符不能是数字:标识符不能为关键字. 基本数据类型多数与c语言相同.重点如下: 1.逻辑类型boolean赋值true/false 2.浮点数 ...
- JAVA 第二周学习总结
20175308 2018-2019-2 <Java程序设计>第二周学习总结 教材学习内容总结: 第二章学习内容: 1.认识标识符与关键字 2.java的八种数据类型,着重记好精度由高到低 ...
- Java第二周总结报告
第二周的学习,开始正式实践进行Java的学习. 本周做了什么? 了解的Java的一些基本知识,如Java变量,数据类型和运算符等.Java变量对不同的数据类型最好采用不同的命名规则,合理的命名有利于提 ...
- 学习Java第二周
这是学习java的第二周,又这样不知不觉的结束了 上周想要学习的这一周也都做到了,可是觉得进度有些慢了,学习了: 1. 接口和抽象类: 2. 集合与数组: 3. 方法的定义: 4. 递归算法: 5.对 ...
随机推荐
- Thinkphp5 实现悲观锁
悲观锁介绍(百科): 悲观锁,正如其名,它指的是对数据被外界(包括本系统当前的其他事务,以及来自外部系统的事务处理)修改持保守态度,因此,在整个数据处理过程中,将数据处于锁定状态.悲观锁的实现,往往依 ...
- shell 脚本编程之特殊变量
$0 当前脚本的文件名$n 传递给脚本或函数的参数.n 是一个数字,表示第几个参数.例如,第一个参数是$1,第二个参数是$2.$# 传递给脚本或函数的参数个数.$* 传递给脚本或函数的所有参数.$@ ...
- 移动端为何不使用click而模拟tap事件及解决方案
移动端click会遇到2个问题,click会有200-300ms的延迟,同时click事件的延迟响应,会出现穿透,即点击会触发非当前层的点击事件. 为什么会存在延迟? Google开发者文档中有提到: ...
- 一步步学习操作系统(2)——在STM32上实现一个可动态加载kernel的"my-boot"
如果要做嵌入式Linux,我们首先要在板子上烧写的往往不是kernel,而是u-boot,这时需要烧写工具帮忙.当u-boot烧写成功后,我们就可以用u-boot附带的网络功能来烧写kernel了.每 ...
- 基于Vue实现后台系统权限控制
原文地址:http://refined-x.com/2017/08/29/基于Vue实现后台系统权限控制/,转载请注明出处. 用Vue/React这类双向绑定框架做后台系统再适合不过,后台系统相比普通 ...
- WeQuant交易策略—MACD
MACD(指数平滑异同平均线)策略简介MACD指标应该是大家最常见的技术指标,在很多股票.比特币的软件中都是默认显示的.MACD是从双指数移动平均线发展而来的.意义和双移动平均线基本相同,即由快.慢均 ...
- vue-cli脚手架npm相关文件解读(1)webpack.base.conf.js
系列文章传送门: 1.build/webpack.base.conf.js 2.build/webpack.prod.conf.js 3.build/webpack.dev.conf.js 4.bui ...
- java --jfree报表
---恢复内容开始--- 1.使用的报表工具: jfree报表 2.下载网址: http://www.jfree.org/ 下载之后先解压:如下图 下载后:需要的jar包!如下图: 打开:找到以下的两 ...
- c语言中的文件格式化读写函数fscanf和fprintf函数
很多时候我们需要写入数据到文件中时都觉得很困扰,因为格式乱七八槽的,可读性太差了,于是我们就想有没有什么函数可以格式化的从文件中输入和输出呢,还真有.下面我将讲解一下fscanf和fprintf的强大 ...
- Java企业微信开发_09_素材管理之下载微信临时素材到本地服务器
一.本节要点 1.获取临时素材接口 请求方式:GET(HTTPS) 请求地址:https://qyapi.weixin.qq.com/cgi-bin/media/get?access_token=AC ...