Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Intro_Java_brief_Liang2011.pdf
Скачиваний:
195
Добавлен:
26.03.2016
Размер:
10.44 Mб
Скачать

5.9 The Scope of Variables 171

5.9 The Scope of Variables

The scope of a variable is the part of the program where the variable can be referenced. A

variable defined inside a method is referred to as a local variable. local variable The scope of a local variable starts from its declaration and continues to the end of the

block that contains the variable. A local variable must be declared and assigned a value before it can be used.

A parameter is actually a local variable. The scope of a method parameter covers the entire method.

A variable declared in the initial-action part of a for-loop header has its scope in the entire loop. But a variable declared inside a for-loop body has its scope limited in the loop body from its declaration to the end of the block that contains the variable, as shown in Figure 5.5.

 

 

 

 

public static void method1() {

 

 

 

 

.

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

for (int

 

= 1; i < 10; i++) {

 

 

 

 

i

 

 

 

 

.

 

 

 

 

The scope of i

 

 

 

.

 

;

 

 

 

 

 

 

 

 

 

 

 

int

j

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

The scope of j

 

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

 

 

 

 

 

}

 

 

 

 

 

 

 

 

 

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

FIGURE 5.5 A variable declared in the initial action part of a for-loop header has its scope in the entire loop.

You can declare a local variable with the same name in different blocks in a method, but you cannot declare a local variable twice in the same block or in nested blocks, as shown in Figure 5.6.

It is fine to declare i in two

 

 

It is wrong to declare i in two

 

 

nonnested blocks

 

 

nested blocks

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

public static void method1() {

 

 

 

 

 

public static void method2() {

 

 

 

 

 

int x = 1;

 

 

 

 

 

 

 

 

 

 

= 1;

 

 

 

 

 

 

int y = 1;

 

 

 

 

 

 

 

 

int i

 

 

 

 

 

 

for (

 

= 1; i < 10; i++) {

 

 

 

 

 

 

 

 

int sum = 0;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

int i

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x += i;

 

 

 

 

 

 

 

 

for (

int i

= 1; i < 10; i++)

 

 

 

}

 

 

 

 

 

 

 

 

 

 

sum += i;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

}

 

 

 

 

 

 

 

 

for (

int i

= 1; i < 10; i++) {

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

}

 

 

 

 

 

 

 

 

 

 

 

y += i;

 

 

 

 

 

 

 

 

 

 

 

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

FIGURE 5.6 A variable can be declared multiple times in nonnested blocks but only once in nested blocks.

Caution

Do not declare a variable inside a block and then attempt to use it outside the block. Here is an example of a common mistake:

for (int i = 0; i < 10; i++) {

}

System.out.println(i);

172 Chapter 5 Methods

The last statement would cause a syntax error, because variable i is not defined outside of the for loop.

5.10 The Math Class

The Math class contains the methods needed to perform basic mathematical functions. You have already used the pow(a, b) method to compute ab in Listing 2.8, ComputeLoan.java, and the Math.random() method in Listing 3.4, SubtractionQuiz.java. This section introduces other useful methods in the Math class. They can be categorized as trigonometric methods, exponent methods, and service methods. Besides methods, the Math class provides two useful double constants, PI and E (the base of natural logarithms). You can use these constants as Math.PI and Math.E in any program.

5.10.1Trigonometric Methods

The Math class contains the following trigonometric methods:

/** Return the trigonometric sine of an angle in radians */ public static double sin(double radians)

/** Return the trigonometric cosine of an angle in radians */ public static double cos(double radians)

/** Return the trigonometric tangent of an angle in radians */ public static double tan(double radians)

/** Convert the angle in degrees to an angle in radians */ public static double toRadians(double degree)

/** Convert the angle in radians to an angle in degrees */ public static double toDegrees(double radians)

/** Return the angle in radians for the inverse of sin */ public static double asin(double a)

/** Return the angle in radians for the inverse of cos */ public static double acos(double a)

/** Return the angle in radians for the inverse of tan */ public static double atan(double a)

The parameter for sin, cos, and tan is an angle in radians. The return value for asin, acos, and atan is a degree in radians in the range between - p/2 and p/2. One degree is equal to p/180 in radians, 90 degrees is equal to p/2 in radians, and 30 degrees is equal to p/6 in radians.

For example,

Math.toDegrees(Math.PI / 2) returns 90.0

Math.toRadians(30) returns π/6

Math.sin(0) returns 0.0

Math.sin(Math.toRadians(270)) returns -1.0

Math.sin(Math.PI / 6) returns 0.5

Math.sin(Math.PI / 2) returns 1.0

Math.cos(0) returns 1.0

Math.cos(Math.PI / 6) returns 0.866

Math.cos(Math.PI / 2) returns 0

Math.asin(0.5) returns π/6

5.10 The Math Class 173

5.10.2Exponent Methods

There are five methods related to exponents in the Math class:

/** Return e raised to the power of x (ex) */ public static double exp(double x)

/** Return the natural logarithm of x (ln(x) = loge(x)) */ public static double log(double x)

/** Return the base 10 logarithm of x (log10(x)) */ public static double log10(double x)

/** Return a raised to the power of1 b (ab) */ public static double pow(double a, double b)

/** Return the square root of x ( x) for x >= 0 */ public static double sqrt(double x)

For example,

Math.exp(1) returns 2.71828

Math.log(Math.E) returns 1.0

Math.log10(10) returns 1.0

Math.pow(2, 3) returns 8.0

Math.pow(3, 2) returns 9.0

Math.pow(3.5, 2.5) returns 22.91765

Math.sqrt(4) returns 2.0

Math.sqrt(10.5) returns 3.24

5.10.3The Rounding Methods

The Math class contains five rounding methods:

/** x is rounded up to its nearest integer. This integer is * returned as a double value. */

public static double ceil(double x)

/** x is rounded down to its nearest integer. This integer is * returned as a double value. */

public static double floor(double x)

/** x is rounded to its nearest integer. If x is equally close * to two integers, the even one is returned as a double. */

public static double rint(double x)

/** Return (int)Math.floor(x + 0.5). */ public static int round(float x)

/** Return (long)Math.floor(x + 0.5). */ public static long round(double x)

For example,

Math.ceil(2.1) returns 3.0

Math.ceil(2.0) returns 2.0

Math.ceil(-2.0) returns –2.0

Math.ceil(-2.1) returns -2.0

Math.floor(2.1) returns 2.0

Math.floor(2.0) returns 2.0

174 Chapter 5 Methods

Math.floor(-2.0) returns –2.0

Math.floor(-2.1) returns -3.0

Math.rint(2.1) returns 2.0

Math.rint(-2.0) returns –2.0

Math.rint(-2.1) returns -2.0

Math.rint(2.5) returns 2.0

Math.rint(3.5) returns 4.0

Math.rint(-2.5) returns -2.0

Math.round(2.6f) returns 3 // Returns int

Math.round(2.0) returns 2 // Returns long

Math.round(-2.0f) returns -2

Math.round(-2.6) returns -3

5.10.4The min, max, and abs Methods

The min and max methods are overloaded to return the minimum and maximum numbers between two numbers (int, long, float, or double). For example, max(3.4, 5.0) returns 5.0, and min(3, 2) returns 2.

The abs method is overloaded to return the absolute value of the number (int, long, float, and double). For example,

Math.max(2, 3) returns 3

Math.max(2.5, 3) returns 3.0

Math.min(2.5, 3.6) returns 2.5

Math.abs(-2) returns 2

Math.abs(-2.1) returns 2.1

5.10.5The random Method

You have used the random() method to generate a random double value greater than or equal to 0.0 and less than 1.0 (0 <= Math.random() < 1.0). This method is very useful. You can use it to write a simple expression to generate random numbers in any range. For example,

1int2 1Math.random1 2 * 102 ¡ Returns a random integer between 0 and 9

50 + 1int2 1Math.random1 2 * 502 ¡ Returns a random integer

 

between 50 and 99

In general,

Returns a random number between

a + Math.random1 2

* b ¡ a and a + b excluding a + b

FIGURE 5.7 You can view the documentation for Java API online.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]