JAVA – 数组 (Arrays, Dictionnaire)

数组是在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来的一种形式。这些按序排列的同类数据元素的集合称为数组。

在JAVA中,当一个数组给创建,那么这个数组就有一个固定的长度。每一个在数组终的个体,我们称其为元素,每一个元素在数组中都有一个对应的索引号码。而这个索引号码,从0开始计数,也就是说第一个数组中的元素,他的索引号码是0. 如下面这个例子:

我们创建了一个数长度为10的数组,那么10个元素对应的号码从0开始,一直到9结束。假设我们需要找第九个元素,那么我们因该用所以号码八去找这个元素。

Illustration of an array as 10 boxes numbered 0 through 9; an index of 0 indicates the first element in the array

下面这个例子是在JAVA变成中,创建一个整数型数组的全过程,当然这个在实际的变成环境下,我们更多用的是循环来自动创建一个数组,而不是一行一行的把数组的元素输入。

class ArrayDemo {
     public static void main(String[] args) {
          int[] anArray;              // 声明一个整数型数组
          anArray = new int[10];      // 给10个整数分配内存

          anArray[0] = 100; // 初始化第一个元素
          anArray[1] = 200; // 初始化第二个元素
          anArray[2] = 300; // 同上。
          anArray[3] = 400;
          anArray[4] = 500;
          anArray[5] = 600;
          anArray[6] = 700;
          anArray[7] = 800;
          anArray[8] = 900;
          anArray[9] = 1000;

          System.out.println("Element at index 0: " + anArray[0]);
          System.out.println("Element at index 1: " + anArray[1]);
          System.out.println("Element at index 2: " + anArray[2]);
          System.out.println("Element at index 3: " + anArray[3]);
          System.out.println("Element at index 4: " + anArray[4]);
          System.out.println("Element at index 5: " + anArray[5]);
          System.out.println("Element at index 6: " + anArray[6]);
          System.out.println("Element at index 7: " + anArray[7]);
          System.out.println("Element at index 8: " + anArray[8]);
          System.out.println("Element at index 9: " + anArray[9]);
     }
}

程序输出结果为:

Element at index 0: 100
Element at index 1: 200
Element at index 2: 300
Element at index 3: 400
Element at index 4: 500
Element at index 5: 600
Element at index 6: 700
Element at index 7: 800
Element at index 8: 900
Element at index 9: 1000

如何申明一个数组

上面的例子向我们展示了申明一个整数型数组。而一个数组的声明,可以通过如下格式:

int[] anArray;

数组的类型跟一组空的终括号,最后加上数组的名字。还有另外一种方式用来声明数组,那就是把中括号放到数组名字的后面,而更改数组的类型,可以和定义变量的类型一样,如:

float anArrayOfFloats[];

下面这个列表是所有可创建的数组类型:

byte[] anArrayOfBytes;
short[] anArrayOfShorts;
long[] anArrayOfLongs;
foat[] anArrayOfFloats;
double[] anArrayOfDoubles;
boolean[] anArrayOfBooleans;
char[] anArrayOfChars;
String[] anArrayOfStrings;

数组的创建,初始化以及访问

数组的创建和初始化可以有两种方式,上面的例子是第一种方式:

anArray = new int[10];  // create an array of integers

通过new来新建一个数组,用int指出其包含的元素类型,以及后面终括号中的数字,限定了数组的长度。接下来在通过如下方式来给数组添加元素:

anArray[0] = 100; // initialize first element
anArray[1] = 200; // initialize second element
anArray[2] = 300; // etc.

这里可以发现,在数组名字后面的中括号中,我们加入了索引号码,也就是说,anArray[0]我们在第一个位置添加第一个元素。从读取或者说访问角度来说,我们也同样使用数组名加中括号和索引数字来读取相对的元素。

而另一种建立数组的方式是:

int[] anArray = {100, 200, 300, 400, 500, 600, 700, 800, 900, 1000};

格式很简单,这个方法是直接把数组进行定义,并且直接给定数组长度和数组元素。我们在大括号中添加数组的元素,100,200,300等等都是数组的元素,而所有元素的个数就是这个数组的长度了。

多层数组的建立

在java编程语言中,我们可是定义一个多层数组。就是一个数组中有多个数组。如下:

第一种方法:声明数组 int[][] anArrays

第二种方法:int[][] anArrays = {{1,2,3,4,5,6,7},{2,1,3,4,5,6},{5,3,3,1,2,3,4,}}

数组的拷贝:

java语言提供了一个模块arraycopy来拷贝一个数组到另外一个数组。

public static void arraycopy(Object src,
                             int srcPos,
                             Object dest,
                             int destPos,
                             int length)

在上面的语法规则中,我们能看到2个Object,他们分别是:第一个Object是原始数组,第二个Object是对象数组。而里面有3个int,分别是:第一个int,原始数组的第几个位置;第二个int,对象数组的位置;第三个int,复制的元素个数。

R-project学习笔记五

5. 数据类型转换和函数paste, nchar

§ paste可以使两个字符串相连,并且以空格隔开,例如

> paste(“numéro”, “1”)
[1] “numéro 1”

我们也可以在用paste的函数sep=来改变分割符,例如

> paste(“numéro”, “1”, “et”, “3”, sep=”_”)
[1] “numéro_1_et_3”

同时,还有几种不同的连接方式:

> x <- c(“numéro”, “partie”, “sous-corpus”)
> y <- c(“a”, “b”, “c”)
> paste(x, y)
[1] “numéro a” “partie b” “sous-corpus c”

或者

> y <- c(“a”, “b”, “c”)
> paste(“numéro”, y)
[1] “numéro a” “numéro b” “numéro c”

§ nchar以字符型向量为输入,并且数字型向量为输出,返回字符型向量中,每一个元素的字符数量。

例如:

> nchar(c(“un”, “deux”, “trois”))
[1] 2 4 5

§ 数据类型的转换

数据类型的转换,我们通过一下函数来进行:

as.logical()                 转换为逻辑型
as.numeric()              转换为数字型
as.character()            转换为字符串型

数据转换的规则:

R-project学习笔记四

4.通过逻辑来抽需向量的值

向量可以进行算术运算,但是2个向量的长度要相同,用逻辑来进行抽取也一样,需要等同的长度。

例如:

> x<- c(“Adv”, “N”, “V”, “D”)
> i <- c(T, F, T, F)
> x[i]
[1] “Adv” “V”
在逻辑的值是TRUE的时候,将会抽取向量中的值。

同理,我们也可以用一些逻辑运算符来进行抽取

§ 逻辑运算符:

大于                            >

小于                           <

等于                         ==

大于等于                >=

小于等于                <=

不等与                    !=

或                             |

一定                         &

用逻辑运算符的运算,例如

> x <- c(1, 6, 2, 8, 3, 4, 9, 10)
> x [x > 5]
[1] 6 8 9 10

还有

> x <- c(T, F, T, F)
> y <- c(T, T, F, F)
> x & y
[1] TRUE FALSE FALSE FALSE
> x | y
[1] TRUE TRUE TRUE FALSE

§ 对于一些返回结果的解释:NULL NA Inf 和 NaN

NULL,如何我们需要提取一个向量中元素的名字,可是这些元素没有名字,因此返回结果是NULL

NA,如果我们通过索引来抽取一个元素,可是这个索引的值大于向量的长度的时候得出NA,NA的类型是数字类型

Inf,数学计算中,1/0的结果未定义,所以,用Inf

NaN,而0/0是没有这种计算的,所以用NaN(Not a Number)

R-project学习笔记三

3. 向量中元素的名字

给向量中的元素命名,一个向量不单单只有索引,同时他还能拥有名字,那么如何来对这个向量命名呢?

§ 例如给向量x中的元素命名

x <- 1:4             结果是1,2,3,4

我们用命名函数names()加与x中同等数量的名称来命名, 如果少于这个数量,那么所却的名字,将自动由NA来代替,如果超过,就显示错误。

names(x)=c(“one”,”two”,”three”,”four”)

最后得出x的值是

one  two  three  four

1       2       3         4

§ 抽取一个名字的值

如何得出上面例子终two的值,这里我们使用的方法和用索引一样

x[“two”]得出结果

two

2

并且这个抽取过程,可以重复进行,并且不许要按照顺序去抽取。

也可以直接在建立一个向量的同时抽取结果

> z <­ c(“le”, “la”, “les”)[c(2, 3)]
> z
[1] “la” “les”

R-project学习笔记二

2。 向量的建立和提取

变量是最简单的向量, 第一章笔记中,我们所说的都是长度为1的向量,但是着仅仅只是一个特殊情况。一个长度不等与1的向量,有多个元素,并且只有一个类型。而且,每一个向量都有一个索引。这里特别提出,竟然第一章中说的变量都是长度为1的向量,那么也应该有向量的特性,例如数字型 1, 他的特性是,长度为1,那么索引就是1,类型是数字型.

§ 建立一个多元素向量:为了建立一个多元素向量,我们需要的是函数c(),

例如:x<-c(1,2,5,6),得出向量x,的值为1 2 5 6,长度为4,类型是数字型,并且每一个元素都一个其对应的索引,如5的索引是3,6的索引是4.

§ 统一的向量的类型:因为一个向量的类型只有一个,所以,如果在建立向量时,包含了多个类型的元素,那么这些元素将会自动转换为一个统一的向量。

转换过程中的优先级:字符串>数字>逻辑(布尔)

§ 函数length(): 函数的用法很简单,就如同其他的一样在括号加入向量的变量名,将会自动输出向量的长度。

§ 一些其他的函数:seq(), rep().

seq(),这个函数是一一列举两个参数为数字类型的向量,有2种方式,1是用逗号将这两个向量隔开,而是用冒号

例如, seq(1,13)或者seq(1:13)得出的结果是一样,结果为, 1 2 3 4 5 6  7 8 9 10 11 12 13

rep(),这个函数就是重复功能,使用2个基本的参数。第一个是所要重复的向量,第二个是重复的次数

例如,rep(3,2),这里得出的结果是:3 3,向量3给重复了2次

§ 提取向量的值:因为每一个向量都有个索引, 所以根据这个索引,我们可以用来提取向量。

例如:x<-c(1,5,2,3,4,7),x的值为 1,5,2,3,4,7,那么对应的索引为第一个位置值是1,第二个位置值是5,第三个位置值是2 … 到最后一位只是7.

如何来提取这个向量的值呢?我们使用方括号,例如要提取向量中第二个值5,我们使用x[2],x[2]的结果就是5了。

R-project学习笔记一

这里介绍一下R的操作方法:

1. 变量类型及分配

算术运算符

加,减,乘,除: +, -, *, /

注:不能对字符串进行操作,只能对数字或者逻辑型的数据,并且逻辑型,将TRUE看作为1,FALSE看作为0

赋值操作符

赋值操作符为: <-或者=,

例如:variable <- 6 / 3, 将6除以3的结果赋值给变量variable,也就是说现在variable的值就是2

如果想显示这个变量的值,可以直接在R中输入变量名,就可以知道变量的值了。

假设,这个变量variable又给赋值一次,

variable <- 3

那么,现在这个变量,不再是之前的值,而改变为为3。

类型

变量类型主要分为三种:

字符串型: “une chaine”, 字符串型的值用爽引号括起来

逻辑(布尔)型 : 值只有2个 TRUE(T)或者FALSE(F),用数字表示为TRUE=1,FALSE=0

数字型:就是数字啦,1到n都是。

一个用来确定变量类型的函数:

is.numeric(), is.character(), is.logical()

括号中间加入需要确认类型值或者变量的变量名

例如:is.numeric(1),返回结果为TRUE

x=”a”, is.logical(x), 返回结果结果为FALASE

Projet de terminologie

L’objectif est de construire une terminologie regroupant les termes du guide ainsi que les relations sémantiques entre les termes.

Ce projet est réalisé sur le system Ubuntu 10.10

Les travaux sont séparés par plusieurs étapes, ce que je présente ici est 1ère partie pour extraire les termes du corpus.

1. je prépare le corpus “corpus-guide_alimentaire.pdf

2. Conversation le fichier PDF vers TXT, la commande “pdftotext” nous permet de faire cette conversation.

3. Vérification le codage du fichier, par la commande “file nomfichier”.

4. cette étape de treetagger, pour sortir une liste avec chaque élément annoté sa catégorie et son lemme, mais avant de faire une analyse par tree-tagger, une filtrage est obligatoire d’exécuter,  la liste ci-dessous contient des caractères spécifiques, et ces caractères spécifiques ne peuvent pas être analysé par le programme YaTeA, donc, ces caractères soit supprimés soit remplacés par la colonne à droit:

œ            oe


’            ‘
“            ”
”            ”
–            –
…            …
€            E

Après avoir filtré, je commence l’analyse de tree-tagger.

Attention, afin de permettre YaTeA bien marcher, il y a encore une petite chose à filtrer, par exemple, le mot “œuf”, on a déjà remplacé par “oeuf”, mais quand le treetagger sort le résultat, il considère “œuf” est le lemme de mot “oeuf”, aussi “bœuf” est le lemme de mot “boeuf”.

5. Cette étape, j’utilise le programme de Flemm,

6. La dernière étape, j’utilise YaTeA pour extraire les termes des deux résultats, un de treetagger, un de Flemm

Java – 原始数据类型(Primitive Data Types)

JAVA属于静态类型的编程语言,也就是说,所有的变量需要预先定义他们的变量类型才能够被使用。JAVA提供了8种不同的变量类型:

byte(比特) 最短的类型,长度在-128 到 127之间,包括-128和127

short (短整型)长度在-32 768 和 32767之间,包括-32 768和32 767

int (整型)长度在-2,147,483,648和2,147,483,647之间,包括-2,147,483,648和2,147,483,647

long(长整型)长度在-9,223,372,036,854,775,808和9,223,372,036,854,775,808之间,包括-9,223,372,036,854,775,808和9,223,372,036,854,775,808

参考:http://baike.baidu.com/view/3522307.html

float(单精度浮点型)单精度浮点型(float )专指占用32位存储空间的单精度(single-precision )值。单精度在一些处理器上比双精度更快而且只占用双精度一半的空间,但是当值很大或很小的时候,它将变得不精确。当你需要小数部分并且对精度的要求不高 时,单精度浮点型的变量是有用的。例如,当表示美元和分时,单精度浮点型是有用的。

参考:http://baike.baidu.com/view/1388812.htm

double(双精度浮点型)正如它的关键字“double ”表示的,占用64位的存储空间。在一些现代的被优化用来进行高速数学计算的处理器上双精度型实际上比单精度的快。所有超出人类经验的数学函数,如 sin( ),cos( ) ,tan()和sqrt( )均返回双精度的值。当你

需要保持多次反复迭代的计算的精确性时,或在操作值很大的数字时,双精度型是最好的选择。

参考:http://baike.baidu.com/view/1388812.htm

boolean(布尔型) 布尔型的值只有两个:FALSE(假)和TRUE(真), 并且 FALSE的值为0,TRUE的值为1

需要保持多次反复迭代的计算的精确性时,或在操作值很大的数字时,双精度型是最好的选择。

参考:http://baike.baidu.com/view/1388812.htm

char(字符型)

char数据类型是一个16位Unicode字符。它有一个最低值’ u0000’(或0)的最高值’ uffff’(或65,535包括在内)。

string 在类java.lang.String的作用下,还有一个(字符串型)

这些类型的默认值:

Data Type Default Value (for fields)
byte 0
short 0
int 0
long 0L
float 0.0f
double 0.0d
char ‘u0000’
String (or any object) null
boolean false

注意:局部变量略有不同,编译器不会指定一个默认值,未初始化的局部变量。如果您不能初始化局部变量声明的地方,一定要为它分配一个值,然后再尝试使用它。访问一个未初始化的局部变量将导致编译时错误。

同时整数类型也可以被用10进制,8进制以及16进制的变量赋值中,例如:

     int decVal = 26; 	// The number 26, in decimal
     int octVal = 032; 	// The number 26, in octal
     int hexVal = 0x1a;	// The number 26, in hexadecim

10进制变量的定义和其他正常情况下一样,而8进制变量的定义,需要在值的最前面加上一个0,后面所跟的数字,每一位上是0-7之间。16进制则以0x开头,并且数字为0-9和A-F之间。

浮点型同时也可以用E或者e来表示(科学计数法中使用),另外单精度浮点类型(float)以F或者f结尾表示,双精度浮点类型(double)用D或者d为结尾表示。

例如:

     double d1 = 123.4;
     double d2 = 1.234e2; // same value as d1, but in scientific notation
     float f1  = 123.4f;

类型字符和字符串可能包含任何的Unicode(UTF – 16)字符。如果你的编辑器和文件系统允许,您可以直接在代码中使用这些字符。如果没有,你可以使用诸如“Unicode转义”’ u0108’(capital C with circumflex),或“S u00ED本身 u00F1or”(Sí Señor in Spanish)。总是使用’单引号’的字符文字和“双引号”的字符串。 Unicode转义序列可以用在别的地方在一个程序(如字段名称,例如),不仅在字符或字符串文字。

JAVA语言还支持一些特殊的字符:b (退格) t(tab)n(换行)f(form feed)r(回车) “(爽引号) ‘(单引号)\(反斜干)

Java – 1er programme helloworld

JAVA的第一步,经典的例子,helloworld法语版:

打开文件编辑器,将一下内容复制到文件编辑器中:

public class Bonjour{ /*类名和文件名要一致,不然编译的时候会出错*/
public static void main(String [] argc){ /*这里有个疑问,methode, 应该是一个函数(function), 不知道属于什么,不过作为第一个程序,暂且忽略,不许要问太多,只要看过程*/
System.out.println(“Bonjour Le Monde”);}}
保存为文件名Bonjour.java,文件名一定要和程序里面的class后面的名字一样,不然会出错,说找不到类。.java为扩展名,未编译时候的程序。

接着在命令行终输入

javac Bonjour.java

能发现存Bonjour.java文件夹中多了一个Bonjour.class文件

接着在命令行输入

java Bonjour.class

来运行程序,能得到一个结果

Bonjour Le Monde