循环,方法和数组

1. 循环

Java 提供了一种称为循环(loop)的功能强大的结构,用来控制一个操作或操作序列重 复执行的次数。

循环是用来控制语句块重复执行的一种结构。循环的概念是程序设计的基础。Java 提供 了三种类型的循环语句:while 循环、do-while 循环和 for 循环。

// while循环,当循环体只包含一条语句或不包含语句,循环体的花括号才可以省略。
while (循环继续条件) {
	// 循环体
    语句(组);
}

// dowhile 循环和 while 循环基本一样,不同的是它先执行循环体一次,然后判断循环继续条件。
do {
    // 循环体
    语句(组);
} while (循环继续条件);

// for循环
for (初始操作;循环继续条件;每次迭代后的操作) {
    // 循环体
    语句(组);
}

在循环控制中,不要使用浮点值来比较值是否相等。因为浮点值都是某些值的近似 ,使用它们可能导致不精确的循环次数和不准确的结果。

输入和输出重定向

如果要输人大量的数值,那么从键盘上输入是非常繁琐的事。可以将这些数据用空格隔开,保存在一个文本文件中,然后使用下面的命令运行这个程序:

java sentlineValue < input.txt

这个命令称为输出重定向(input redirection)。类似地,还有输出重定向( output redirection), 输出重定向将输出发送给文件,而不是 将它们显示在控制台上。输出重定向的命令为:

java ClassName > output.txt

可以在同一命令中同时使用输入重定向和输出重定向。

java SentineValue < input.txt > output.txt

2. 方法

方法可以用于定义可重用的代码以及组织和简化编码。定义方法的语法如下所示:

修饰符 返回值类型 方法名(参数列表) {

// 方法体;

}

// 定义一个方法
public static int max(int i, int j) {
    int result;
    result = (i > j)? i : j;
    return result;
}

// 调用一个方法
int z = max(x, y);

在方法头中,需要对每一个参数进行独立的数据类型声明。实参必须与方法签名中定义的参数在次序和数量上匹配,在类型上兼容。类型兼容 是指不需要经过显式的类型转换,实参的值就可以传递给形参,例如, 将int 型的实参值传递给 double 型形参。

void 方法不返回值。

调用方法的时候是通过传值的方式将实参传给形参的。如果实参是变量而不是直接量,则将该变量的值传递给形参。无论形参在方法中是否改变,该变量都不受影响。

模块化使得代码易于维护和调试,并且使得代码可以被重用。

重载方法使得你可以使用同样的名字来定义不同方法,只要它们的签名是不同的。

Java中,方法重载(method overloading)是指,在一个类中有两个方法,它们具有相同的名字,但有不同的参数列表。Java 编译器根据方法签名决定使用哪个方法。

被重载的方法必须具有不同的参数列表。不能基于不同修饰符或返回值类型来重载方法。

有时调用一个方法时,会有两个或更多可能的匹配,但是,编译器无法判断哪个是 最精确的匹配。这称为歧义调用( ambiguous invocation)。歧义调用会产生一个编译错误。

变量的作用域(scope of a variable) 是指变量可以在程序中引用的范围。

在方法中定义的变量 称为局部变量(local variable)。局部变量的作用域从声明变量的地方开始,直到包含该变量的块结束为止。局部变量都必须在使用之前进行声明和赋值。

可以在一个方法中的不同块里声明同名的局部变量,但是,不能在嵌套块中或同一块中两次声明同一个局部变量。

3. 数组

Java 和许多高级语言都提供了一种称作数组(array) 的数据结构,可以用它来存储一个元素个数固定且元素类型相同的有序集。

一旦数组被创建,它的大小是固定的。使用一个數组引用变量,通过下标来访问數组中的元素。

为了在程序中使用数组,必须声明一个引用数组的变量,并指明数组的元素类型。

elementType[] arrayRefVar;

elementType 可以是任意数据类型,但是数组中所有的元素都必须具有相同的数据类型。

声明一个数组变量、创建数组、然后将数组引用賦值给变量这三个步驟可以合并在一条语句里:

elementType[] arrayRefVar = new elementType[arraySize];

一个數组变量看起来似乎是存储了一个數组,但实际上它存储的是指向数组的引用。

当给数组分配空间时,必须指定该数组能够存储的元素个数,从而确定数组大小。 创建数组之后就不能再修改它的大小。可以使用 arrayRefVar.length 得到数组的大小。

当创建数组后,它的元素被賦予默认值,数值型基本数据类型的默认值为 0, char 型的 默认值为 ’\u0000‘,boolean 型的默认值为 false。

数组中的每个元素都可以使用下面的语法表示,称为下标变量(indexed variable):

arrayRefVar[index];

Java 有一个简捷的标记,称作数组初始化语法,它使用下面的语法将声明数组、创建数 组和初始化数组结合到一条语句中:

elementType[] arrayRefVar = {valueO, valuel, valuek};

数组初始化语法中不使用操作符 new。使用数组初始化语法时,必须将声明、创建和 初始化数组都放在一条语句中。将它们分开会产生语法错误。

foreach循环

Java 支持一个简便的 for 循环,称为 foreach 循环,即不使用下标变量就可以顺序地遍 历整个数组。

通常,foreach 循环的语法为:

for (elementType element: arrayRefVar) {

// process the element

}

要将一个数组中的内容复制到另外一个中,你需要将数组的每个元素复制到另 外一个数组中。

可以使用 java.lang.System 类的 arraycopy 方法复制数组,而不是使用循环。 arraycopy 的语法如下所示:

arraycopy(sourceArray, srcPos, targetArray, tarPos, length);

当将一个數组传递给方法时,數组的引用被传给方法。

使用下述语法创建数组:

new elementType[]{valueO, valuel, … ,valued};

该数组没有显式地引用变量,这样的数组称为匿名數组(anonymous array)。

当从方法中返回一个数组时,数组的引用被返回。

可以把类型相同但个数可变的参数传递给方法。方法中的参数声明如下:

typeName… parameterName ( 类型名 … 参 数 名)

在方法声明中,指定类型后紧跟着省略号(...)。只能给方法中指定一个可变长参数, 同时该参数必须是最后一个参数。任何常规参数必须在它之前。Java 将可变长参数当成数组对待。可以将一个数组或数目可变的参数传递给可变长参 。

java.util.Arrays 类包含一些实用的方法用于常见的數组操作,比如排序和查找。可以使用 sort 或者 parallelSort方法对整个数组或部分数组进行排序。可以采用二分査找法 (binary Search 方法) 在数组中査找关键字。数组必须提前按升序 排列好。如果数组中不存在关键字,方法返回 -( 插入点下标 +1)。可以采用 equals 方法检测两个数组是否相等。如果它们的内容相同,那么这两个数组 相等。可以使用 fill 方法填充整个数组或部分数组。还可以使用 toString 方法来返回一个字符串,该字符串代表了数组中的所有元素。

命令行参数

当调用 main 方法时,Java 解释器会创建一个数组存储命令行参数,然后将该数组的引用传递给 args。如果运行程序时没有传递字符串,那么使用 new String[0]创建数组。在这种情况,该数组是长度为0的空数组。

二维数组

表格或矩阵中的数据可以表示为二维数组。下面是声明二维数组的语法:

dataType[][] arrayVar

二维数组实际上是一个数组,它的每个元素都是一个一维数组。

二维数组中的每一行本身就是一个数组,因此,各行的长度就可以不同。这样的数组称 为锯齿数组(ragged array)。

使用语法 new int[5][]创建数组时,必须指定第一个下标。语法 new int[][] 是错误的。

嵌套的 for 循环常用于处理二维数组。

将一个二维数组传递给方法的时候,数组的引用传递给了方法。

posted @ 2021-05-15 12:27  geeks_reign  阅读(111)  评论(0编辑  收藏  举报