月度归档: 2017 年 8 月

java中方法与构造方法的理解

初学者可能会搞晕或者是不理解,个人认为要理解并区分方法与构造方法 我们首先应该了解他们的作用,用作用做对比才能方便区分,接下来才是慢慢了解如何使用。


首先先简单了解一下大概作用

  • 方法: 方法是语句的集合,它们在一起执行一个功能。实际上就相当于python或者c中的函数。
  • 构造方法: 构造方法其实就是对类进行里面数据的初始化定义,它是方法中的一种(方法分为三种,接下来会说到),你可以有也可以没有。没有系统会自动给你生成一个无参的。重点也是需要提前强调的是它需要与类名相同。

之后继续说

  • 方法: 一个类中的方法分为三类: 1)全局方法 2) 成员方法 3)构造方法
public class Test{
private  int xxx;   
public Test(int age){ //这是构造方法
xxxxxx
}
public void xxxxxx(int xxxx){  //这是成员方法
xxxxxx
}
public static int xxxxx(){ //这是全局方法,加了static ,成员方法就会变成全局方法
return xxxxx;
}
}

三者区别:

  1. 成员方法必须构造类的实例化对象进行访问
  2. 全局方法可以用类直接访问
  3. 构造方法是实例化对象时进行初始化的

一般情况下,定义一个方法包含以下语法:

修饰符 返回值类型 方法名(参数类型 参数名){
    ...
    方法体
    ...
    return 返回值;
}
  1. 修饰符:修饰符,这是可选的,告诉编译器如何调用该方法。定义了该方法的访问类型。
  2. 返回值类型 :方法可能会返回值。returnValueType 是方法返回值的数据类型。有些方法执行所需的操作,但没有返回值。在这种情况下,returnValueType 是关键字void。
  3. 方法名:是方法的实际名称。方法名和参数表共同构成方法签名。
  4. 参数类型:参数像是一个占位符。当方法被调用时,传递值给参数。这个值被称为实参或变量。参数列表是指方法的参数类型、顺序和参数的个数。参数是可选的,方法可以不包含任何参数。
  5. 方法体:方法体包含具体的语句,定义该方法的功能。

 

  • 构造方法

在创建对象的时候,对象成员可以由构造函数方法进行初始化。

也就是我们创造实例化的代码中 new后面跟的就是构造方法

Telphone phone=new Telphone();

等号右面

new Telphone()

相当于是以Telphone类为模板,在堆空间里创建一个Telphone类对象

末尾的()代表着,在对象创建后,立即调用Telphone类的构造函数,对刚生成的对象进行初始化。

等号左面

Telphone phone

创建命名了一个Telphone类引用变量phone

这里用一下imooc的图

image

接下来再说下有参和无参的构造方法的区别

有参就是你可以在创建对象时候赋值

public Test(String name){
mz=name;
}

Test为构造方法(函数)名 需要与类名相同 

创建对象

Test name=new Test("xxxxx");

无参就需要这样

public Test(){
}
public String mingzi(String name){
mz=name;
return mz;
}

创建对象并赋值

Test nick=new Test();
nick.mingzi="ruilin";

总的来说,有参构造函数和无参构造函数都可以提前初始化一些值,但是有参可以在实例化时就进行赋值而无参不可以。这些赋值或者说初始化都是为了后面调用方法(函数)更加方便或者是去提供一些功能所必要的参数来防止报错,这也就是构造方法的作用。

最后再放一个有参的构造方法的例子便于理解

public class Testff {
	int num;
	public Testff(int n){
		num = n;
	}
	public int numb(int a,int b){
		System.out.println(a+"\n"+b+"\n"+num);
		int c=a+b+num;
		return c;				
	}

	public static void main(String[] args) {
		Testff test=new Testff(11);
		System.out.println(test.num+"\n"+"---------");
		System.out.println(test.numb(1,2));
	}

}

output:

11
---------
1
2
11
14

 


以上就是我对java中方法与构造方法的理解与区分,其中也简述了对有参与无参构造方法的一些理解,欢迎交流。

java实现桶排序

了解桶排序

这个算法就好比有 11 个桶,编号从 0~10。每出现一个数,就在对应编号的桶中放一个 小旗子,最后只要数数每个桶中有几个小旗子就 OK 了。例如 2 号桶中有 1 个小旗子,表示 2 出现了一次;3 号桶中有 1 个小旗子,表示 3 出现了一次;5 号桶中有 2 个小旗子,表示 5 出现了两次;8 号桶中有 1 个小旗子,表示 8 出现了一次。

image


如何实现桶排序

  1. 使用数组代替桶的作用,利用数组的下标直接排好顺序
  2. 每次遇到相应的旗子编号就对其对应的桶即相同的数组下标如a[5]的值+1用于记录出现几次
  3. 依次判断桶中的值即为输出的次数
  4. 依次按照次数输出桶的编号即数组的下标

 


利用java实现

题目:

考试成绩需要由小往大依次排序 成绩范围为0-10 学生数为5人 请依次输入学生成绩并进行排序

java code:
import java.util.Scanner;;
public class sortest {
	public static void main(String[] args) {
		
		int[] scores=new int[11];//定义一个空间大小为11的变量 0-10即11个
		Scanner input = new Scanner(System.in);//控制台等待输入
		for(int i=0;i<=10;i++){    //初始化scores值为0
			scores[i]=0;
		}
		for(int j=1;j<=5;j++){    //循环输入5名学生成绩
			System.out.println("请输入第"+j+"名学生成绩");
			int t=input.nextInt();
			scores[t]++;//计数
		}
		System.out.println("**************");
		for(int a=0;a<=10;a++){   //依次判断每个成绩
			for(int b=1;b<=scores[a];b++){   //依次判断每个成绩的人数
				System.out.println(a);
			}
		}
	}

	
}

 

xlrd基本操作并配合matplotlib绘图笔记

一个简单的小例子快速了解如何利用xlrd读取excel并借助plt绘图

//之前代码有误,导致上图显示女生数量与男生一样,代码已改正

#encoding=utf-8
import xlrd
import matplotlib.pylab as plt
from pylab import *
def main():
    book=xlrd.open_workbook('./pdtest.xlsx')
    sheet_name = book.sheet_names()[0]#获得指定索引的sheet名字
    print sheet_name
    sheet=book.sheet_by_name('sheet1')
    rows=sheet.nrows#行数
    cols=sheet.ncols#列数
    print rows,cols
    row_data=sheet.row_values(0)
    col_data=sheet.col_values(0)
    print row_data,col_data
    cell=sheet.cell_value(1,2)
    print cell
    for i in range(rows):#每行数据
        print sheet.row_values(i)
    col1=sheet.col_values(1)[1:]#去掉列名称 打印指定列
    print col1
    k = 0
    for i in col1:
        print int(i)
        if int(i)==int('2'):
            k+=1
    print k
    book1=xlrd.open_workbook('./reg.xls')
    #sheet_name1=book1.sheet_names()[0]
    #print sheet_name1
    list=book1.sheets()[0]
    nrows=list.nrows
    print nrows
    print "------------------"
    col2=list.col_values(4)[1:]
    g = 0
    b = 0
    for i in col2:
        if i == u"\u5973":
            g=g+1

        if i == u"\u7537":
            b+=1

    print g,b

    mpl.rcParams['font.sans-serif'] = ['SimHei']
    mpl.rcParams['axes.unicode_minus'] = False
    plt.figure(1)
    plt.bar(left=0,height=b,width=0.35,align="center",color="b",label="boy")
    plt.bar(left=0.5,height=g,width=0.35,align="center",color="y",label="girl")
    plt.title(u"2017太原市中考性别分布[柱状图]")
    plt.xlabel(u"性别")
    plt.ylabel(u"人数")
    plt.xticks((0, 0.5), (u"男", u"女"))
    plt.text(0, b+0.05, "%d" % b, ha="center", va="bottom")
    plt.text(0.5, g+0.05, "%d" % g, ha="center", va="bottom")
    #图中有误,之前把代码里面的参数g写成了b
    #plt.legend(loc="upper left")
    plt.show()


if __name__ == '__main__':
    main()

output:

sheet1
5 3
[u'', u'man', u'woman'] [u'', u'a', u'b', u'c', u'd']
1.0
[u'', u'man', u'woman']
[u'a', 2.0, 1.0]
[u'b', 6.0, 3.0]
[u'c', 2.0, 4.0]
[u'd', 1.0, 6.0]
[2.0, 6.0, 2.0, 1.0]
2
6
2
1
2
41609
------------------
20445 21163

 

 

 

Pandas基本操作笔记

Python Data Analysis Library 或 pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。

#encoding=utf-8
import numpy as np
import pandas as pd
def main():
    #生成表格
    dates=pd.date_range("20170801",periods=8)
    df=pd.DataFrame(np.random.randn(8,5),index=dates,columns=list("ABCDE"))#生成框架
    print df
    dff=pd.DataFrame({"A":np.random.randint(1,10,8),"B":pd.date_range("20170707",periods=8)})
    print dff

    #基本操作
    print df.head(3)#打印前三行
    print df.tail(3)#打印后三行
    print df.index
    print df.values
    print df.T#转置
    print df.sort_values("C")#排序C列 升序
    print df.sort_index(axis=1,ascending=False)#用属性值排序 降序
    print df.describe()#数据的相关信息
    print df["A"]#切片
    print df[:3]
    print df["20170801":"20170806"]
    print df.loc[dates[0]]
    print df.loc["20170802":"20170806",["B","D"]]
    print df.at[dates[0],"C"]
    print df.iloc[1:3,2:4]
    print df.iloc[1,4]#2行第5列
    print df[df.B>0]
    print df[df<0]
    print df[df["E"].isin([1,2])]

    #基本设置
    sl=pd.Series(list(range(10,18)),index=pd.date_range("20170801",periods=8))
    print sl
    df["F"]=sl
    print df
    df.at[dates[0],"A"]=0
    print df
    df.iat[1,4]=666
    df.loc[:,"D"]=np.array([4]*len(df))
    print df
    df2=df.copy()#拷贝
    df2[df2<0]=-df2#负数变为正数
    print df2


if __name__ == '__main__':
    main()

output:

                   A         B         C         D         E
2017-08-01  1.075245 -0.605058  0.712755  2.418159 -0.028940
2017-08-02 -1.513320 -0.517082  1.363238  0.618522 -0.450400
2017-08-03 -2.267711 -2.235939  2.288919  2.608362 -1.181633
2017-08-04 -0.276085 -1.130215 -0.122823 -0.542475 -0.331884
2017-08-05 -0.231365 -0.488244  1.757364 -0.967584 -1.448575
2017-08-06  0.377513  0.051755  0.322172 -0.462239  0.823563
2017-08-07  1.009144 -0.670553  0.262810 -0.865274 -0.721550
2017-08-08 -0.257351  0.984785 -0.297281 -0.230398  0.697477
   A          B
0  9 2017-07-07
1  3 2017-07-08
2  3 2017-07-09
3  6 2017-07-10
4  6 2017-07-11
5  4 2017-07-12
6  5 2017-07-13
7  6 2017-07-14
                   A         B         C         D         E
2017-08-01  1.075245 -0.605058  0.712755  2.418159 -0.028940
2017-08-02 -1.513320 -0.517082  1.363238  0.618522 -0.450400
2017-08-03 -2.267711 -2.235939  2.288919  2.608362 -1.181633
                   A         B         C         D         E
2017-08-06  0.377513  0.051755  0.322172 -0.462239  0.823563
2017-08-07  1.009144 -0.670553  0.262810 -0.865274 -0.721550
2017-08-08 -0.257351  0.984785 -0.297281 -0.230398  0.697477
DatetimeIndex(['2017-08-01', '2017-08-02', '2017-08-03', '2017-08-04',
               '2017-08-05', '2017-08-06', '2017-08-07', '2017-08-08'],
              dtype='datetime64[ns]', freq='D')
[[ 1.07524464 -0.60505755  0.71275536  2.41815902 -0.02894002]
 [-1.51331977 -0.51708246  1.36323759  0.6185221  -0.45040032]
 [-2.26771071 -2.23593917  2.28891947  2.60836214 -1.1816333 ]
 [-0.27608484 -1.13021474 -0.12282251 -0.54247504 -0.33188383]
 [-0.23136532 -0.48824379  1.75736371 -0.96758439 -1.44857541]
 [ 0.37751303  0.05175454  0.32217176 -0.46223914  0.82356261]
 [ 1.00914409 -0.67055311  0.26280966 -0.86527427 -0.72155023]
 [-0.25735124  0.98478455 -0.29728085 -0.23039814  0.69747694]]
   2017-08-01  2017-08-02  2017-08-03  2017-08-04  2017-08-05  2017-08-06  \
A    1.075245   -1.513320   -2.267711   -0.276085   -0.231365    0.377513   
B   -0.605058   -0.517082   -2.235939   -1.130215   -0.488244    0.051755   
C    0.712755    1.363238    2.288919   -0.122823    1.757364    0.322172   
D    2.418159    0.618522    2.608362   -0.542475   -0.967584   -0.462239   
E   -0.028940   -0.450400   -1.181633   -0.331884   -1.448575    0.823563   

   2017-08-07  2017-08-08  
A    1.009144   -0.257351  
B   -0.670553    0.984785  
C    0.262810   -0.297281  
D   -0.865274   -0.230398  
E   -0.721550    0.697477  
                   A         B         C         D         E
2017-08-08 -0.257351  0.984785 -0.297281 -0.230398  0.697477
2017-08-04 -0.276085 -1.130215 -0.122823 -0.542475 -0.331884
2017-08-07  1.009144 -0.670553  0.262810 -0.865274 -0.721550
2017-08-06  0.377513  0.051755  0.322172 -0.462239  0.823563
2017-08-01  1.075245 -0.605058  0.712755  2.418159 -0.028940
2017-08-02 -1.513320 -0.517082  1.363238  0.618522 -0.450400
2017-08-05 -0.231365 -0.488244  1.757364 -0.967584 -1.448575
2017-08-03 -2.267711 -2.235939  2.288919  2.608362 -1.181633
                   E         D         C         B         A
2017-08-01 -0.028940  2.418159  0.712755 -0.605058  1.075245
2017-08-02 -0.450400  0.618522  1.363238 -0.517082 -1.513320
2017-08-03 -1.181633  2.608362  2.288919 -2.235939 -2.267711
2017-08-04 -0.331884 -0.542475 -0.122823 -1.130215 -0.276085
2017-08-05 -1.448575 -0.967584  1.757364 -0.488244 -0.231365
2017-08-06  0.823563 -0.462239  0.322172  0.051755  0.377513
2017-08-07 -0.721550 -0.865274  0.262810 -0.670553  1.009144
2017-08-08  0.697477 -0.230398 -0.297281  0.984785 -0.257351
              A         B         C         D         E
count  8.000000  8.000000  8.000000  8.000000  8.000000
mean  -0.260491 -0.576319  0.785894  0.322134 -0.330243
std    1.158991  0.919133  0.928070  1.436732  0.812523
min   -2.267711 -2.235939 -0.297281 -0.967584 -1.448575
25%   -0.585394 -0.785469  0.166402 -0.623175 -0.836571
50%   -0.244358 -0.561070  0.517464 -0.346319 -0.391142
75%    0.535421 -0.353244  1.461769  1.068431  0.152664
max    1.075245  0.984785  2.288919  2.608362  0.823563
2017-08-01    1.075245
2017-08-02   -1.513320
2017-08-03   -2.267711
2017-08-04   -0.276085
2017-08-05   -0.231365
2017-08-06    0.377513
2017-08-07    1.009144
2017-08-08   -0.257351
Freq: D, Name: A, dtype: float64
                   A         B         C         D         E
2017-08-01  1.075245 -0.605058  0.712755  2.418159 -0.028940
2017-08-02 -1.513320 -0.517082  1.363238  0.618522 -0.450400
2017-08-03 -2.267711 -2.235939  2.288919  2.608362 -1.181633
                   A         B         C         D         E
2017-08-01  1.075245 -0.605058  0.712755  2.418159 -0.028940
2017-08-02 -1.513320 -0.517082  1.363238  0.618522 -0.450400
2017-08-03 -2.267711 -2.235939  2.288919  2.608362 -1.181633
2017-08-04 -0.276085 -1.130215 -0.122823 -0.542475 -0.331884
2017-08-05 -0.231365 -0.488244  1.757364 -0.967584 -1.448575
2017-08-06  0.377513  0.051755  0.322172 -0.462239  0.823563
A    1.075245
B   -0.605058
C    0.712755
D    2.418159
E   -0.028940
Name: 2017-08-01 00:00:00, dtype: float64
                   B         D
2017-08-02 -0.517082  0.618522
2017-08-03 -2.235939  2.608362
2017-08-04 -1.130215 -0.542475
2017-08-05 -0.488244 -0.967584
2017-08-06  0.051755 -0.462239
0.71275536229
                   C         D
2017-08-02  1.363238  0.618522
2017-08-03  2.288919  2.608362
-0.45040032497
                   A         B         C         D         E
2017-08-06  0.377513  0.051755  0.322172 -0.462239  0.823563
2017-08-08 -0.257351  0.984785 -0.297281 -0.230398  0.697477
                   A         B         C         D         E
2017-08-01       NaN -0.605058       NaN       NaN -0.028940
2017-08-02 -1.513320 -0.517082       NaN       NaN -0.450400
2017-08-03 -2.267711 -2.235939       NaN       NaN -1.181633
2017-08-04 -0.276085 -1.130215 -0.122823 -0.542475 -0.331884
2017-08-05 -0.231365 -0.488244       NaN -0.967584 -1.448575
2017-08-06       NaN       NaN       NaN -0.462239       NaN
2017-08-07       NaN -0.670553       NaN -0.865274 -0.721550
2017-08-08 -0.257351       NaN -0.297281 -0.230398       NaN
Empty DataFrame
Columns: [A, B, C, D, E]
Index: []
2017-08-01    10
2017-08-02    11
2017-08-03    12
2017-08-04    13
2017-08-05    14
2017-08-06    15
2017-08-07    16
2017-08-08    17
Freq: D, dtype: int64
                   A         B         C         D         E   F
2017-08-01  1.075245 -0.605058  0.712755  2.418159 -0.028940  10
2017-08-02 -1.513320 -0.517082  1.363238  0.618522 -0.450400  11
2017-08-03 -2.267711 -2.235939  2.288919  2.608362 -1.181633  12
2017-08-04 -0.276085 -1.130215 -0.122823 -0.542475 -0.331884  13
2017-08-05 -0.231365 -0.488244  1.757364 -0.967584 -1.448575  14
2017-08-06  0.377513  0.051755  0.322172 -0.462239  0.823563  15
2017-08-07  1.009144 -0.670553  0.262810 -0.865274 -0.721550  16
2017-08-08 -0.257351  0.984785 -0.297281 -0.230398  0.697477  17
                   A         B         C         D         E   F
2017-08-01  0.000000 -0.605058  0.712755  2.418159 -0.028940  10
2017-08-02 -1.513320 -0.517082  1.363238  0.618522 -0.450400  11
2017-08-03 -2.267711 -2.235939  2.288919  2.608362 -1.181633  12
2017-08-04 -0.276085 -1.130215 -0.122823 -0.542475 -0.331884  13
2017-08-05 -0.231365 -0.488244  1.757364 -0.967584 -1.448575  14
2017-08-06  0.377513  0.051755  0.322172 -0.462239  0.823563  15
2017-08-07  1.009144 -0.670553  0.262810 -0.865274 -0.721550  16
2017-08-08 -0.257351  0.984785 -0.297281 -0.230398  0.697477  17
                   A         B         C  D           E   F
2017-08-01  0.000000 -0.605058  0.712755  4   -0.028940  10
2017-08-02 -1.513320 -0.517082  1.363238  4  666.000000  11
2017-08-03 -2.267711 -2.235939  2.288919  4   -1.181633  12
2017-08-04 -0.276085 -1.130215 -0.122823  4   -0.331884  13
2017-08-05 -0.231365 -0.488244  1.757364  4   -1.448575  14
2017-08-06  0.377513  0.051755  0.322172  4    0.823563  15
2017-08-07  1.009144 -0.670553  0.262810  4   -0.721550  16
2017-08-08 -0.257351  0.984785 -0.297281  4    0.697477  17
                   A         B         C  D           E   F
2017-08-01  0.000000  0.605058  0.712755  4    0.028940  10
2017-08-02  1.513320  0.517082  1.363238  4  666.000000  11
2017-08-03  2.267711  2.235939  2.288919  4    1.181633  12
2017-08-04  0.276085  1.130215  0.122823  4    0.331884  13
2017-08-05  0.231365  0.488244  1.757364  4    1.448575  14
2017-08-06  0.377513  0.051755  0.322172  4    0.823563  15
2017-08-07  1.009144  0.670553  0.262810  4    0.721550  16
2017-08-08  0.257351  0.984785  0.297281  4    0.697477  17