20145312 《Java程序设计》第三周学习总结

学习笔记

Chapter 4

4.1类与对象

4.1.1 定义类

1.以服饰设计为例,类定义用class关键词,建立衣服实例要用new关键词。在Java术语中,叫参考名称、参考变量或叫参考。

2.在Clothes类中,定义了color与size两个变量,叫作定义两个值域成员或定义两个对象数据成员。

代码如下:

  1. class Clothes{ //定义Clothes类
  2. String color;
  3. char size;
  4. }
  5. public class Field {
  6. public static void main(String[] args){
  7. Clothes sun=new Clothes();
  8. Clothes spring=new Clothes();//建立Clothes实例
  9. sun.color="red";
  10. sun.size='s';
  11. spring.color="green";
  12. spring.size='M';//为个别对象的数据成员指定值
  13. System.out.printf("sun(%s,%c)%n",sun.color,sun.size);
  14. System.out.printf("spring(%s,%c)%n",spring.color,spring.size);//显示个别对象的数据成员值
  15. }
  16. }
  17. /*
  18. 在这个Field.java中,定义了两个类,一个是公开的Field类,所以文档主文档名是Field,另一个是非公开的Clothes。
  19. /*

结果如下:

  1. sun(red,s)
  2. spring(green,M)

3.定义构造函数,建立对象同时指定数据成员值。

代码如下:

  1. class Clothes2{
  2. String color;
  3. char size;
  4. Clothes2(String color,char size){ //定义构造函数
  5. this.color=color; //color参数的值指定给这个对象的color成员
  6. this.size=size;
  7. }
  8. }
  9. public class Field2 {
  10. public static void main(String[] args){
  11. Clothes2 sun=new Clothes2("red",'S'); //使用指定构造函数建立对象
  12. Clothes2 spring=new Clothes2("green",'M');
  13. System.out.printf("sun(%s,%c)%n",sun.color ,sun.size );
  14. System.out.printf("spring(%s,%c)%n",spring.color ,spring.size );
  15. }
  16. }
  17. /*
  18. 在这个例子中,定义新建对象时,必须传入两个自变量给string类型的color参数和char类型的size参数,
  19. 而构造函数中,由于color参数与数据成员color同名,不能用color=color表示,要使用this表示,
  20. 将color参数的值指定给这个对象(this)的color成员。
  21. */

结果如下:

  1. sun(red,S)
  2. spring(green,M)
4.1.2 使用标准类

1.Java SE提供了标准API,这些API就是由许多类组成的,直接取用标准类,省去重新打造基础的需求。

2.使用java.util.Scanner

代码如下:

  1. import java.util.Scanner;//告诉编译程序接下来想偷懒
  2. public class Guess {
  3. public static void main(String[] args){
  4. Scanner scanner=new Scanner(System.in);//建立SScanner实例
  5. int number=(int)(Math.random() *10);
  6. int guess;
  7. do{
  8. System.out.print("猜数字(0~9):");
  9. guess=scanner.nextInt();//取得下一个整数
  10. }while(guess!=number);
  11. System.out.println("猜中了...XD");
  12. }
  13. }
  14. /*
  15. 一开始用import编译,不用每次输入java.util.Scanner。Scanner 的nextInt()方法会尝试剖析输入的下一个字符串为int类型。如果想取得用户输入的整行文字,使用nextLine()。
  16. */

结果如下:

  1. 猜数字(0~9):4
  2. 猜数字(0~9):7
  3. 猜中了...XD

3.使用java.math.BigDecimal得到更好的精确度。

代码如下:

  1. import java.math.BigDecimal;
  2. public class DecimalDemo {
  3. public static void main(String[] args){
  4. BigDecimal operand1=new BigDecimal("1.0");
  5. BigDecimal operand2=new BigDecimal("0.8");
  6. BigDecimal result=operand1.subtract(operand2 );
  7. System.out.println(result);
  8. }
  9. }
  10. /*
  11. BigDecimal提供plus(),subtract(),multiply(),divide()等方法,可以进行加、减、乘、除等运算
  12. */

结果如下:

  1. 0.2

4.利用BigDecimal比较相等的例子。

代码如下:

  1. import java.math.BigDecimal;
  2. public class DecimalDemo2 {
  3. public static void main(String[] args){
  4. BigDecimal op1=new BigDecimal("0.1");
  5. BigDecimal op2=new BigDecimal("0.1");
  6. BigDecimal op3=new BigDecimal("0.1");
  7. BigDecimal result=new BigDecimal("0.3");
  8. if(op1.add(op2) .add(op3).equals(result)){
  9. System.out.println("等于0.3");
  10. }
  11. else{
  12. System.out.println("不等于0.3");
  13. }
  14. }
  15. }
  16. /*
  17. 由于BigDecimal的add()等方法都会返回代表运算结果的BigDecimal,所以就直接利用返回的BigDecimal再调用add()方法,最后再调用equals()比较两个BigDecimal实质上是否相同,所以有了a.add(b).add(c).equals(result)的写法。
  18. */

结果如下:

  1. 等于0.3
4.1.3 对象指定与相对性

1.当=用于基本类型时,是将值复制给变量,当用于基本类型时,是比较两个变量存储的值是否相同。

2.在操作对象时,=是将某个名片绑到某个对象,而是用在比较两个名牌是否绑到同一个对象。而!=正好相反,是比较两个名牌是否没参考同一对象。

4.2 基本类型打包器

4.2.1 打包基本类型

1.要让基本类型想对象一样操作,可以使用Long,Integer,Double,Float,Byte,

Boolean 等类来打包基本类型。

2.这类所谓的打包器提供对象实例作为“壳”,将基本类型打包在对象中。

代码如下:

  1. public class IntegerDemo {
  2. public static void main(String[] args){
  3. int data1=10;
  4. int data2=20;
  5. Integer wrapper1=new Integer(data1);
  6. Integer wrapper2=new Integer(data2);
  7. System.out.println(data1/3);
  8. System.out.println(wrapper1.doubleValue()/3);
  9. System.out.println(wrapper1.compareTo(wrapper2));
  10. }
  11. }
  12. /*
  13. 操作Integer的doubleValue()将打包值以double类型返回,这样就会在double空间中做相除,结果就会显示3.33333333...。Integer提供CompareTo()方法,可与另一个Integer值相比较,如果打包值相同就返回0,小于CompareTo()传回对象打包值就返回-1,否则就返回1.
  14. */

结果如下:

  1. 3
  2. 3.3333333333333335
  3. -1
4.2.2 自动装箱、拆箱

1.除了使用new建立基本类型打包器外,从J2SE 5.0之后提供了自动装箱。

代码如下:

  1. public class IntegerDemo2 {
  2. public static void main(String[] args){
  3. Integer data1=10;
  4. Integer data2=20;
  5. System.out.println(data1.doubleValue()/3);
  6. System.out.println(data1.compareTo(data2));
  7. }
  8. }

结果如下:

  1. 3.3333333333333335
  2. -1

2.自动拆箱就是自动取出打包器中的基本形态信息。例如:

Integer wrapper=10;//自动装箱

Integer foo=wrapper;//自动拆箱

4.3 数组对象

4.3.1 数组基础

1.在java中声明数组并初始值,如下:

int[] scores={88,65,45,78,97,23,41,35,66};

想要依次取出数组中的每个值,可以用for循环。

代码如下:

  1. public class Score {
  2. public static void main(String[] args){
  3. int[] scores={88,81,84,76,95,91,93,74,73,98};
  4. for(int i=0;i<scores.length;i++){
  5. System.out.printf("学生成绩:%d%n",scores[i]);
  6. }
  7. }
  8. }

结果如下:

  1. 学生成绩:88
  2. 学生成绩:81
  3. 学生成绩:84
  4. 学生成绩:76
  5. 学生成绩:95
  6. 学生成绩:91
  7. 学生成绩:93
  8. 学生成绩:74
  9. 学生成绩:73
  10. 学生成绩:98

2.二维数组使用两个索引存取数组元素。例如,声明数组来储存XY坐标位置要放的值,代码如下:

  1. public class XY {
  2. public static void main(String[] args) {
  3. int [][] cords={{1,2,3},{4,5,6}};
  4. for(int x=0;x<cords.length;x++){
  5. for(int y=0;y<cords[x].length;y++){
  6. System.out.printf("%2d",cords[x][y]);
  7. }
  8. System.out.println();
  9. }
  10. }
  11. }
  12. /*
  13. 由于二维数组有两个维度,必须先通过cords.length得知有几列,
  14. 对于每一列再利用cords[x].length知道有几个元素。
  15. */

结果如下:

  1. 1 2 3
  2. 4 5 6
4.3.2 操作数组对象

1.如果事先不知道元素值,只知道元素个数,可以使用new 关键词指定长度来建立数组。在java中,new一定是建立对象。使用new建立数组后,每个索引元素会有默认值。例如,将每个学生的成绩默认为60分起,代码如下:

  1. public class Score3 {
  2. public static void main(String[] args) {
  3. int[] scores=new int[10];
  4. for(int score:scores){
  5. System.out.printf("%2d",score);
  6. }
  7. System.out.println();
  8. Arrays.fill(scores,60);
  9. for(int score:scores){
  10. System.out.printf("%3d",score);
  11. }
  12. }
  13. }

结果如下:

  1. 0 0 0 0 0 0 0 0 0 0
  2. 60 60 60 60 60 60 60 60 60 60

2.可以利用二维数组建立不规则矩阵。代码如下:

  1. public class IrregularArray {
  2. public static void main(String[] args){
  3. int[][] arr=new int[2][]; //声明arr对象会有两个索引
  4. arr[0]=new int[] {1,2,3,4,5};//arr[0]是长度为5的一维数组
  5. arr[1]=new int[] {1,2,3};//arr[1]是长度为3的一维数组
  6. for(int[] row:arr){
  7. for(int value:row){
  8. System.out.printf("%2d",value);
  9. }
  10. System.out.println();
  11. }
  12. }
  13. }
  14. /*
  15. New int[2][]仅提供第一个[]数组,这表示arr参考对象会有两个索引,但暂时参考至null。
  16. */

结果如下:

  1. 1 2 3 4 5
  2. 1 2 3

3.类类型建立数组。用new关键词建立数组:

Integer[] scores=new Integer[3];

这个片段的每个索引都是Ineger类型。代码如下:

  1. public class IntegerArray {
  2. public static void main(String[] args){
  3. Integer[] scores=new Integer[3];
  4. for(Integer score:scores){
  5. System.out.println(score);
  6. }
  7. scores[0]=new Integer(99);
  8. scores[1]=new Integer(87);
  9. scores[2]=new Integer(65);
  10. for(Integer score:scores){
  11. System.out.println(score);
  12. }
  13. }
  14. }

结果如下:

  1. null
  2. null
  3. null
  4. 99
  5. 87
  6. 65
4.3.3 数组复制

1.要做数组复制,基本做法是另行建立新数组。可以使用System.arraycopy()的方法,用原生方式复制每个索引元素。还有更方便的Arrays.copyOf()的方法,代码如下:

  1. import java.util.Arrays;
  2. public class CopyArray {
  3. public static void main(String[] args){
  4. int[] scores1={88,81,75,69,74,34,54,27,98,96};
  5. int[] scores2=Arrays.copyOf(scores1,scores1.length);
  6. for(int score:scores2) {
  7. System.out.printf("%3d",score);
  8. }
  9. System.out.println();
  10. scores2[0]=99;//不影响score1参考的数组对象
  11. for(int score:scores1){
  12. System.out.printf("%3d",score);
  13. }
  14. }
  15. }

结果如下:

  1. 88 81 75 69 74 34 54 27 98 96
  2. 88 81 75 69 74 34 54 27 98 96

2.对于类类型声明的数组则要注意参考的行为,代码如下:

  1. class Clothes3{
  2. String color;
  3. char size;
  4. Clothes3(String color,char size){
  5. this.color=color;
  6. this.size=size;
  7. }
  8. }
  9. public class ShallowCopy {
  10. public static void main(String[] args){
  11. Clothes3[] c1={new Clothes3("red",'L'),new Clothes3("blue",'M')};
  12. Clothes3[] c2=new Clothes3[c1.length];
  13. for(int i=0;i<c1.length;i++){
  14. c2[i]=c1[i];
  15. }
  16. c1[0].color ="yellow";
  17. System.out.println(c2[0].color);
  18. }
  19. }
  20. /*
  21. 实际上循环中仅将c1每个索引处所参考的对象,也给c2每个索引来参考,并没有实际复制出Clothes3的对象,叫作复制参考,称这个行为是浅层复制。如果要连同对象一起复制的话要自行复制。
  22. */

结果如下:

  1. yellow

3.连同对象一起复制,要自行操作。代码如下:

  1. class Clothes4{
  2. String color;
  3. char size;
  4. Clothes4(String color,char size){
  5. this.color=color;
  6. this.size=size;
  7. }
  8. }
  9. public class DeepCopy {
  10. public static void main(String[] args){
  11. Clothes4[] c1={new Clothes4("red",'L'),new Clothes4("blue",'M')};
  12. Clothes4[] c2=new Clothes4[c1.length];
  13. for(int i=0;i<c1.length;i++){
  14. Clothes4 c=new Clothes4(c1[i].color,c1[i].size);//自行复制元素
  15. c2[i]=c;
  16. }
  17. c1[0].color="yellow";
  18. System.out.println(c2[0].color);
  19. }
  20. }

结果如下:

  1. red

4.4 字符串对象

4.4.1 字符串基础

1.建立字符串

String name=”justin”; //建立String实例

System.out.println(name); //显示justin

System.out.println(name.length()); //显示长度为6

System.out.println(name.charAt(0)); //显示第一个字符j

System.out.println(name.toUpperCase()); //显示JUSTIN

2.将字符串剖析为基本类型

如:将number剖析为int整数:Integer.parseInt(number)

下面这个范例可以让用户输入整数,输入0后会计算所有整数总和并显示。

代码如下:

  1. import java.util.Scanner;
  2. public class Sum {
  3. public static void main(String[] args){
  4. Scanner scanner=new Scanner(System.in);
  5. long sum=0;
  6. long number=0;
  7. do{
  8. System.out.printf("输入整数:");
  9. number=Long.parseLong(scanner.nextLine());
  10. sum+=number;
  11. }while(number!=0);
  12. System.out.println("总和:"+sum);
  13. }
  14. }

结果如下:

  1. 输入整数:2
  2. 输入整数:4
  3. 输入整数:6
  4. 输入整数:3
  5. 输入整数:0
  6. 总和:15

Chapter 5 对象封装

5.1 何谓封装

  1. 封装(Encapsulation)实际上是使用方法(Method)将类的数据隐藏起来,控制用户对类的修改和访问数据的程度,隐藏对象细节,将对象当作黑箱进行操作。通过构造方法(构造函数)封装初始化流程,代码如下:
  1. class CashCard {
  2. String number;
  3. int balance;
  4. int bonus;
  5. CashCard(String number,int balance,int bonus){
  6. this.number=number;
  7. this.balance=balance;
  8. this.bonus=bonus;
  9. }
  10. }
  1. 通过成员方法(函数)封装操作,代码如下:
  1. public class CashApp {
  2. public static void main(String[] args){
  3. CashCard[] cards={
  4. new CashCard("A001",500,0),
  5. new CashCard("A002",300,0),
  6. new CashCard("A003",1000,1),
  7. new CashCard("A004",2000,2),
  8. new CashCard("A005",3000,3)
  9. };
  10. for(CashCard card:cards){
  11. System.out.printf("(%s,%d,%d)%n",card.number,card.balance,card.bonus);
  12. }
  13. }
  14. }

5.2 类语法细节

5.2.1 public权限修饰

1.如果没有声明权限修饰的成员,只有在相同包的类程序代码下才可以直接存取,也就是“包范围权限”。如果想在其他包的类程序代码中存取某包的类或对象成员,则该类或对象成员必须是公开成员,在java中要使用public加以声明。

5.2.2 关于构造函数

1.特点:(1) 函数名与类名相同 ;(2)不用定义返回值类型; (3)不可以写return语句。

2.作用: 给对象进行初始化。

3.注意:(1) 默认构造函数的特点。(2) 多个构造函数是以重载的形式存在的。

代码如下:

  1. class Some
  2. {
  3. void someMethod(int i)
  4. {
  5. System.out.println("int 版本被调用");
  6. }
  7. void someMethod(Integer integer)
  8. {
  9. System.out.println("Integer 版本被调用");
  10. }
  11. }
  12. public class Overload
  13. {
  14. public static void main(String[] args)
  15. {
  16. Some s = new Some();
  17. s.someMethod(1);
  18. }
  19. }

结果如下:

  1. int 版本被调用
5.2.3 this关键字

1.特点:this代表其所在函数所属对象的引用。 换言之:this代表类对象的引用。

2.当在函数内需要用到调用该函数的对象时,就用this。代码如下:

  1. class Other{
  2. {
  3. System.out.println("对象初始区块");
  4. }
  5. Other()
  6. {
  7. System.out.println("Other() 构造函数");
  8. }
  9. Other(int o )
  10. {
  11. this();
  12. System.out.println("Other(int o ) 构造函数");
  13. }
  14. }
  15. public class ObjectInitialBlock
  16. {
  17. public static void main(String[] args)
  18. {
  19. new Other(1);
  20. }
  21. }

结果如下:

  1. 对象初始区块
  2. Other() 构造函数
  3. Other(int o ) 构造函数
5.2.4 static关键字

1.用于修饰成员(成员变量和成员函数)。被修饰后的成员具备以下特点:(1)随着类的加载而加载;(2)优先于对象存在;(3)被所有对象所共享;(4)可以直接被类名调用;

2.使用注意:(1)静态方法只能访问静态成员;(2)静态方法中不可以写this,super关键字;(3)主函数是静态的。

import static语法代码如下:

  1. import java.util.Scanner;
  2. import static java.lang.System.in;
  3. import static java.lang.System.out;
  4. public class ImportStatic
  5. {
  6. public static void main(String[] args)
  7. {
  8. Scanner scanner = new Scanner(in);
  9. out.print("请输入姓名:");
  10. out.printf("%s 你好!%n",scanner.nextLine());
  11. }
  12. }

结果如下:

  1. 请输入姓名:袁心
  2. 袁心 你好!

代码托管截图

教材学习中的问题和解决过程

  1. 问题:在做教材81页的程序练习时,把类定义为Clothes出现错误。

    解决过程:在仔细阅读教材后知道了,在这个Field.java中,定义了两个类,一个是公开的Field类,所以文档主文档名是Field,另一个是非公开的Clothes。
  2. 问题:在自己编写程序时分不清println和printf的区别。

    解决过程:在博客园中看到有的同学发布的话题,其中有关这方面的解答。

    解决结果: printf:f就是format的意思,也就是格式化,是对输出文字做格式化后再显示在文本模式中。后面常用%d,%f,%b…这些格式控制符号,一般在输出变量类型比较多的时候使用,也用在需要计算机计算或判断后再输出的情形。

    print:将它的参数显示在命令窗口,并将输出光标定位在所显示的最后一个字符之后。

    println:将它的参数显示在命令窗口,并在结尾加上换行符,将输出光标定位在下一行的开始。相当于在print中加了一个%n换行符。当输出信息比较单一简单时,一般采用println,但println也可以用于多种变量类型的输出,中间用“+号”连接,例如System.out.println("3 + 3 = "+a) //这里假设程序中a=6,可能这个例子不算太恰当,但代码中的+前后连接了不同的类型,也可以用println输出。

代码调试中的问题和解决过程

  1. 问题:在编写教材109页的练习时,不理解运行结果的含义,代码如下:
  1. public class Average {
  2. public static void main(String[] args){
  3. long sum=0;
  4. for(String arg:args){
  5. sum+=Long.parseLong(arg);
  6. }
  7. System.out.println("平均:"+(float)sum/args.length);
  8. }
  9. }

结果如下:

  1. 平均:NaN

解决过程:未解决。

其他(感悟、思考等,可选)

感悟与思考:在看教材4、5章时,明显感觉到了java语言的独特魅力,它是一种面向对象的语言,因此在看教材或编程序是,要牢牢把握对象的特征,每一步都是为了服务对象,所以要深刻了解的对象特性才能理解语句间的逻辑关系。上周我是在把教材都理解的基础上再进行编程练习,这样既耽误时间,而且理解起来也比较困难,这周我采取边读教材边练习的方法,在练习的同时能帮助我更好的理解知识点,并加深记忆。我从中明白了,学习方法不是一尘不变的,要在实践的过程中不断摸索更高效的途径,从而找到适合自己的学习方法。

学习进度条

参考资料

20145312 《Java程序设计》第三周学习总结的更多相关文章

  1. Java程序设计第三周学习总结

    1. 本周学习总结 2. 书面作业 Q1.代码阅读 public class Test1 { private int i = 1;//这行不能修改 private static int j = 2; ...

  2. 对于“2017面向对象程序设计(Java)第三周学习总结”存在问题的反馈

    对于“2017面向对象程序设计(Java)第三周学习总结”存在问题的反馈 一:教学中存在的学习问题 “1.由于同学们平时练习不足,上课总是出现跟不上老师的节奏的现象. 2.个别同学上课不认真听讲,打开 ...

  3. 20145312 《Java程序设计》第九周学习总结

    20145312 <Java程序设计>第九周学习总结 学习笔记 Chapter 16整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 SUN公司为了简化.统一对数据库的操作, ...

  4. 20145213《Java程序设计》第九周学习总结

    20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...

  5. 20145213《Java程序设计》第二周学习总结

    20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...

  6. 21045308刘昊阳 《Java程序设计》第九周学习总结

    21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...

  7. 20145330孙文馨 《Java程序设计》第一周学习总结

    20145330孙文馨 <Java程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...

  8. 20145337 《Java程序设计》第九周学习总结

    20145337 <Java程序设计>第九周学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC可以 ...

  9. 《Java程序设计》第九周学习总结

    20145224 <Java程序设计>第九周学习总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的 ...

  10. 20145236 《Java程序设计》第九周学习总结

    20145236 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC简介 1.JDBC是java联机数据库的标准规范.它定义了一组标准类与接口,标准API ...

随机推荐

  1. PHP 开发环境的搭建和使用03-- 安装mySql

    1/  安装的MySQL版本是5.6.10版本的,直接点击Install 2/ 选择 Execute 3/  更新最新版本成功后,选择 "next" 4/  自定义安装方式,选择C ...

  2. 对 js 高程 Preflighted Reqeusts 的理解

    看JS高程遇到 Preflighted Reqeusts不大理解,遂百度下: 转自:http://todoit.me/ajax-preflight/ 最近在做一个 VUE 的项目的时候, 和后端的小伙 ...

  3. Python--进阶处理7

    # ====================第七章:函数========================= # 为了能让一个函数接受任意数量的位置参数,可以使用一个* 参数# 为了接受任意数量的关键字 ...

  4. C语言实现双链表(带头节点)

    双链表和单链表性质相似只是在多加了一个前指针 1.定义结构体 typedef struct Node{ int data; struct Node *prior; struct Node *next; ...

  5. ggplot2画图小试

    # 注意aes(x=wt, y=mpg)中的wt不是字符"wt",因此它是属性字段名(例如,EXCel中字段名有Student,那就是Student,而不是"Studen ...

  6. GNU Libtool

    Fastbit (WAH)的代码可在链接中下载 安装以及运行命令如下: 解压命令: $ tar -zxvf fastbit-ibis1.3.8.tar.gz 安装命令: $ cd fastbit-ib ...

  7. Exchange Pause or stop transport service

    The Microsoft Exchange Transport service is a service available both on the Microsoft Exchange Serve ...

  8. python中的itertools

    在量化数据处理中,经常使用itertools来完成数据的各种排列组合以寻找最优参数 import itertools #1. permutations: 考虑顺序组合元素 items = [1, 2, ...

  9. Best Reward---hdu3613(manacher 回文串)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3613 题意就是给你一个串s 然后求把s分成两部分之后的价值总和是多少,分开的串 如果是回文那么价值就是 ...

  10. Python程序员的10个常见错误(转)

    add by zhj:虽然学Python也有两年了,但这些问题的确容易犯,看来对Python的理解还有些地方不深入.先转了,有时间再好好看 译文:http://blog.jobbole.com/682 ...