3.1 Introduction
In the early days of your math courses only constants were used. You know what I mean. Numbers were 5, 13 and 127. You added, subtracted, multiplied and divided with numbers. Later, you had more fun with fractions and decimal numbers. At some point - and the exact year does not matter - variables were introduced. In science and mathematics it is useful to express formulas and certain relationships with variables that explain some general principle. If you drive at an average rate of 60 mph and you continue for 5 hours at that rate, you will cover 300 miles. On the other hand, if you drive at a rate of 45mph for 4 hours, you will travel 180 miles. These two problems are examples that only use constants. The method used for computing this type of problem can be expressed in a more general formula that states:
Distance = Rate ´ Time
The formula is normally used in its abbreviated form, which is d = r ´ t. In this formula d, r and t are variables. The meaning is literal. A variable is a value that is able to change. A constant like 5 will always be 5, but d is a variable, which changes with the values of r and t. Both r and t are also variables.
Variables make mathematics, science and computer science possible. Without variables you are very limited in the type of programs that you can write. In this chapter you will learn how to use variables in your programs.
3.2 Declaring Variables
A program is made up of words, which usually are called keywords. The keywords in a program have a very specific purpose, and only keywords are accepted by the compiler. A compiler will only create a bytecode file if the source code obeys all the Java syntax rules. The first rule is that only keywords known to the Java compiler can be used in a program. Another syntax rule is that each variable needs to specify its data type.
How about first concentrating on one rule at a time? So what exactly is a keyword? You have seen certain words like void, static and println, but that only tells part of the story. Keywords can be divided into three categories.
Java Keywords
· Reserved Words
· Pre-defined Java Identifiers
· User-defined Identifiers
Reserved Words
Reserved words are part of the Java language the same way that table, walk and mother are part of the English language. Each reserved word has a special meaning to Java and these reserved words cannot be used as an identifier for any other purpose in a program. Reserved words that you have seen so far are public, void and static.
Predefined Identifiers
Java has a large number of libraries that enhance the basic Java language. These libraries contain special program modules, called methods that perform a variety of tasks to simplify the life of a programmer. You have seen two methods so far: print and println. They are special routines that display output in a text window.
User-Defined Identifiers
The third and last type of word used in a program is selected by the programmer. Programmers need to select an identifier for each variable that is used in a program. Variables are used in a program for many purposes, which you will see shortly. You already have familiarity with the general concept of a variable from mathematics. It is possible to say distance = 60 * 10to compute the distance traveled at 60 mph for a 10 hour period. That statement comes from the general formula of d = r x t, which uses three variables. Make sure your identifier selection is neither a reserved word nor a predefined identifier. The rules for naming an identifier are simple. The identifier can use alphanumeric characters and the underscore character. Additionally, you need to be sure that the identifier starts with an alpha character. You will note that this rule is identical to the rule for naming the class identifier of your program.
Fine, you have accepted the need to declare the variables that are used in a program. You have sympathy with the compiler who needs to sort out the proper keywords from the typos, mistakes, and general attempts made by sometimes-clueless programmers. Of course, you do not fall in the clueless category. Now what about this second syntax rule mentioned earlier, something about indicating a data type with a variable? What is that all about?
The data type rule is for the purpose of using memory efficiently. All variable values need to be stored in memory during program execution. As long as the program is alive and the variable is in use, its value will be stored somewhere in RAM. It is certainly possible to skip the whole data type scene and give the same exact memory to each variable. Now is that not the same as stating that every room in a building needs to be the same size? How about meeting rooms, closets, offices, bathrooms and dining halls; should they all be the same size? No, that is too silly; a room size is designed for its purpose. Building materials are expensive and lease rates are outrageous. A thrifty business person makes sure to rent the proper amount of space; no more and no less.
Variables are needed to store information such as a single character, which can be placed in one byte or two bytes of memory. Other variables store large numbers that require four or eight bytes of memory. There are also variables that need to store the street address of a customer. Such values may require around 50 bytes of memory. The efficient and practical approach is to declare all variables before they are used and let the compiler know how much memory is required. Once the compiler sees the data type of the variable, memory space will be reserved or allocated for the specified data type.
There is a good selection of simple data types in Java, but for starters take a look at program Java0301.java. That program uses an integer data type, which is abbreviated int in Java. In figure 3.1 you see that the data type, int,starts the declaration statement, followed by the variable identifier, which in this case is either a or b. This program also introduces the assignment statement, which is a statement that assigns a value to a variable. The equal sign is the assignment operator, and does not create an equation. Novice programmers often think that a program statement, like a = 10;is an equation. Such a statement should be read as a becomes 10 or 10 is assigned to a, but not a equals 10.
Figure 3.1
// Java0301.java
// This program demonstrates how to declare integer variables with <int>,
// and it shows how to display the value of a variable with <println>.
public class Java0301
{
public static void main (String args[])
{
int a;
int b;
a = 10;
b = 25;
System.out.println();
System.out.println(a);
System.out.println(b);
System.out.println();
}
}
Java is picky about a variety of things and pickiness in a language is good or bad depending on your point of view. Experienced programmers like a program language to be relaxed and give them lots of slack. Novice programmers benefit more from a tight leash that allows little breathing space. Most people agree that Java does not let you jump around much. As a matter of fact, Java insists that a variable is assigned a value before the variable value is used. You declare the variable, so you see to it that it gets a value. Look at Java0302.java in figure 3.2. That program will not even compile.
Figure 3.2
// Java0302.java
// This program is Java0301.java without assigning values to the variables. Java does
// not compile a program that attempts to use unassigned "simple" data types.
public class Java0302
{
public static void main (String args[])
{
int a;
int b;
System.out.println(a);
System.out.println(b);
}
}
Figure 3.2 Continued
Program Java0302.java is almost identical to the previous program minus the assignment statements. This makes Java very unhappy and you are rewarded with some error messages that let you know your evil programming ways. Java is polite though. The error message says that the variable might not have been initialized, and we both know that there is no initialization in sight. The output you see is shown at the bottom of the JCreator IDE. Click on the Build Output tab. You may be looking at the Task List window, which is similar.
It is a good habit to assign an initial value to a variable as soon as the variable is declared. It takes less program code to use such an approach and you remember to take care of the variable the same time that you first introduce the variable to your compiler. It is possible to combine the declaration statement and the assignment statement into one program statement. This is shown in figure 3.3 by program Java0303.java, and you will note that it produces the exact same output as the earlier program shown in figure 3.1.
Figure 3.3
// Java0303.java
// This program demonstrates that it is possible to declare a variable
// identifier and initialize the variable in the same statement.
// It is a good habit to initialize variables where they are declared.
public class Java0303
{
public static void main (String args[])
{
int a = 10;
int b = 25;
System.out.println();
System.out.println(a);
System.out.println(b);
System.out.println();
}
}
Figure 3.3 Continued
The early program examples in the last chapter displayed string literals, which were contained between the quotes of a println statement. Now you see that the double quotes are gone, and the value of the variable is displayed by println. You are probably quite impressed by this humble Java println method, but wait there is more. You can combine the literal character string output with the variable value output by using the plus operator, as is shown by program Java0304.java, in figure 3.4.
Figure 3.4
// Java0304.java
// This program combines output of literals and variables.
// "a: " is a string literal, which displays the characters a:
// a is an integer variable, which displays its integer value 10.
public class Java0304
{
public static void main (String args[])
{
int a = 10;
int b = 25;
System.out.println("a: " + a);
System.out.println("b: " + b);
}
}
3.3 The int Data Type
The previous section introduced the notion of declaring variables. You will see many more program examples with variable declarations. In an attempt to be organized, the additional program examples will be shown in a section for each data type. You did already see some examples with the int data type, but as you will see there is quite a bit more to be said about integers. You also need to know how to perform arithmetic operations with integers.
The int data type in Java has five arithmetic operations. You may have expected the four basic operations of addition, subtraction, multiplication and division, but Java adds modulus division to the list. Look at program Java0305.java in figure 3.5, which demonstrates each one of the operations.
Figure 3.5
// Java0305.java
// This program demonstrates the five integer operations.
public class Java0305
{
public static void main (String args[])
{
int a = 0;
int b = 25;
int c = 10;
a = b + c; // Addition
System.out.println(b + " + " + c + " = " + a);
a = b - c; // Subtraction
System.out.println(b + " - " + c + " = " + a);
a = b * c; // Multiplication
System.out.println(b + " * " + c + " = " + a);
a = b / c; // Integer Division
System.out.println(b + " / " + c + " = " + a);
a = b % c; // Remainder Division
System.out.println(b + " % " + c + " = " + a);
}
}
There is little explanation needed for addition, subtraction and multiplication. Your biggest concern is that you need to remember to use an asterisk * for multiplication. Division can be a little confusing. Java recognizes two types of division: integer division and modulus or remainder division. Look at the examples in figure 3.6 and figure 3.7 to understand the difference between the two types of division.
Figure 3.6 Integer Division Examples
12 / 3 = 4
12 / 4 = 3
12 / 5 = 2
12 / 8 = 1
12 / 12 = 1
12 / 15 = 0
Figure 3.7
Modulus (remainder) Division Examples
12 % 3 = 0
12 % 4 = 0
12 % 5 = 2
12 % 8 = 4
12 % 12 = 0
12 % 15 = 12
It might be good to take a trip down memory lane -- back to when you first learned about long division. Look at the 5 examples in figure 3.8 on the next page.
Figure 3.8
3.4 The double Data Type
Integers are nice and used for many purposes, but there are also many other computations that require fractions. In science, industry and business, fractions are a way of life. For instance, interest on bank loans and savings accounts are computed as percentages of the principal amount, and percentages involve computation with fractions.
You have seen that in Java, the data type we use for integers is int. This is nice and logical. Now we come to real numbers. You might already be thinking that there is a real data type to store real numbers. This would especially be true if you have programmed in a language like Pascal, which has a real data type. However, in Java the data type for real numbers is called double.
Now I know what your next question is, "What in the world does double have to do with real numbers?" This question is very logical and there is a logical answer. Java actually has 2 data types for real numbers. The first is not very accurate and we will not be using it. The second uses twice as much memory allowing it to be twice as accurate. This is where the term double comes from. It is a double precision real number.
Program Java0306.java, in figure 3.9, is designed to demonstrate the double data type as well as the four real number operations. These are essentially the same as the integer operations. There is still addition, subtraction, and multiplication. What is different is division.
When integers are divided you get an integer quotient with an integer remainder.
Example: 7 / 2 = 3 remainder 1
When real numbers are divided, there is a real number quotient and no remainder.
Example: 7.0 / 2.0 = 3.5
Figure 3.9
// Java0306.java
// This program introduces the real number type <double>.
// This program demonstrates the four real number operations.
public class Java0306
{
public static void main (String args[])
{
double d1 = 0;
double d2 = 10.0;
double d3 = 3.33333333;
d1 = d2 + d3;
System.out.println(d2 + " + " + d3 + " = " + d1);
d1 = d2 - d3;
System.out.println(d2 + " - " + d3 + " = " + d1);
d1 = d2 * d3;
System.out.println(d2 + " * " + d3 + " = " + d1);
d1 = d2 / d3;
System.out.println(d2 + " / " + d3 + " = " + d1);
System.out.println();
}
}
3.5 Arithmetic Shortcut Notations
The language C started a shortcut trend with operators. This trend continued with C++, and Java adopted the popular shortcuts founded by the older C programming language. Shortcuts are popular with programmers. This section will show you the available shortcuts.
Program Java0307.java demonstrates the Java unary operators, which are operators with a single operand. This could look strange to you because in your previous exposure to mathematical notation you probably only saw binary operators. The program example in figure 3.10 shows both the ++ and -- unary operators. ++ is a shortcut to add 1 to a variable, and -- is a shortcut to subtract 1.
Figure 3.10
// Java0307.java
// This program shows "unary" arithmetic shortcut notation in Java.
// ++ will add 1 to a variable and -- will subtract 1.
public class Java0307
{
public static void main (String args[])
{
int num = 10;
System.out.println("num equals " + num);
num++;
System.out.println("num equals " + num);
num++;
System.out.println("num equals " + num);
num++;
System.out.println("num equals " + num);
num++;
System.out.println("num equals " + num);
num--;
System.out.println("num equals " + num);
num--;
System.out.println("num equals " + num);
num--;
System.out.println("num equals " + num);
num--;
System.out.println("num equals " + num);
System.out.println();
}
}
NOTE: Some people use ++num instead of num++ and --num instead of num--.
Figure 3.10 Continued
Java Unary Operators
k++; is the same as: k = k + 1;
k--; is the same as: k = k - 1;
Proper Usage:
int k = 5;
k++;
System.out.println(k);
k--;
System.out.println(k);
Unary operators are lovely, but they are quite limited. Incrementing by one or decrementing by one can be quite boring. Sometimes you want to go for broke and increment by two, three or maybe even ten. Are there shortcuts for such type of operations? There sure are and every binary operations that was shown earlier in this chapter has a shortcut equivalent.
Binary operators have shortcuts, and like unary shortcuts, there are potential pitfalls where program statements can be quite ambiguous. Shortcuts are good, but there is such a thing as too much of a shortcut and this can make a program difficult to debug, comprehend and update. Right now examine Java0308.java in figure 3.11 and observe the shortcut syntax of binary operations.
Figure 3.11
// Java0308.java
// This program shows arithmetic assignment operations in Java.
// x+=10; is the same as x = x + 10;
public class Java0308
{
public static void main (String args[])
{
int x = 10;
System.out.println("x equals " + x);
x += 10;
System.out.println("x equals " + x);
x -= 10;
System.out.println("x equals " + x);
x *= 10;
System.out.println("x equals " + x);
x /= 10;
System.out.println("x equals " + x);
x %= 10;
System.out.println("x equals " + x);
System.out.println();
}
}
Binary Operator Shortcuts
No Shortcut Notation
Shortcut Notation
k = k + 5
k = k - 5
k = k * 5
k = k / 5
k = k % 5
k += 5
k -= 5
k *= 5
k /= 5
k %= 5
3.6 The char & String Data Types
The very first Java program you saw in this book used only strings. Strings are extremely common. It is a string of characters that forms a word, and it is a string of words that forms a sentence. Java processes characters and strings with two data types. There is the char data type for processing individual characters, and there is the String data type for processing sets of one or more characters.
In previous programs you have observed that a string of characters is contained between double quotes. That is still very true. There is a small difference for a single character, which needs to be contained between two single quotes.
Program Java0309.java, in figure 3.12, starts by concentrating on the humble char data type. Three different character variables are declared and initialized. This program also demonstrates that chain assignment is possible. This is another type of shortcut. In one program statement the character 'Q' is assigned to all three variables.
Figure 3.12
// Java0309.java
// This program demonstrates the <char> data types.
// It also demonstrates how assignment can be "chained" with
// multiple variables in one statement.
public class Java0314
{
public static void main (String args[])
{
char c1 = 'A';
char c2 = 'B';
char c3 = 'C';
System.out.println("The three characters are: " + c1 + c2 + c3);
c1 = c2 = c3 = 'Q';
System.out.println("The three characters are: " + c1 + c2 + c3);
System.out.println();
}
}
If excitement is your goal in life then char is not going to provide much. It is pretty much a dull data type. String is a great deal more interesting. Now you might argue that excitement has been seriously lacking from all this variable stuff. Like, where are the spaceships shooting photon torpedoes? Well those photon torpedoes are used a lot in a variety of Star Trek episodes and students in AP Computer Science might wish to create a program that performs that type of sophistication.
Right now your excitement revolves around variables. The topic at hand is the String data type and watch with amazement as you see the next program Java0310.java, in figure 3.13, combine various string variables together in seamless perfection. It is not the high of skiing in fresh powder, but it is much cheaper.
Figure 3.13
// Java0310.java
// This program demonstrates the <String> data type.
public class Java0310
{
public static void main (String args[])
{
String firstName = "Kathy" ;
String lastName = "Smith";
System.out.println("firstName: " + firstName);
System.out.println("lastName: " + lastName);
System.out.println("Complete Name: " + firstName + " " + lastName);
System.out.println();
}
}
Did you observe that strings are performing addition here? At least the plus operator is used and it seems that some type of adding is going on. There is a form of addition shown here that is peculiar to strings, and a lovely name exists for this operation, known as concatenation. This is an example of overloading the plus operator. The same exact operator performs totally different functions with numbers and with strings.
String Concatenation
Concatenation is the joining together of two or more strings.
"Hello" + "World" = "HelloWorld"
"Hello" + " " + "World" = "Hello World"
"100" + "200" = "100200"
The plus operator ( + ) is used both for arithmetic addition
and string concatenation. The same operator performs
two totally different operations. This is called overloading.
3.7 The boolean Data Type
More than a century ago there was a mathematician, George Boole, who developed a new branch of mathematics. His mathematics did not involve arithmetic nor Algebra, but logical statements that are either true or false. This new branch of mathematics was named Boolean Algebra after its founder. Today, in computer science, a data type that has only two values of true and false is a called a Boolean data type, and in Java you use the reserved word, boolean.
Program example Java0311.java, in figure 3.14 demonstrates the proper syntax to declare a Boolean variable, but it does not explain how to use Boolean variables. The boolean data type is included here to complete the simple data types. You will learn in later chapters how to use this very unique data type.
Figure 3.14
// Java0311.java
// This program demonstrates the <boolean> data type.
// The boolean type can only have two values: true or false.
public class Java0311
{
public static void main (String args[])
{
boolean value = true;
System.out.println("value: " + value);
value = false;
System.out.println("value: " + value);
System.out.println();
}
}
3.8 Declaring Constants
We are done with simple data types. In more formal language Java's simple data types are called primitive data type. You have seen them all and they will provide a base for many of your programs in the beginning of this course. But you are not done with this chapter. There are a few related topics that link to simple data types. So far all the data types were used with a variable declaration and variable implies that some initialized value is able to change or vary.
Now what if you want to store a value somewhere in memory for a specified data type, but you do not want the value to change? If you write a program that computes a variety of areas and volumes that involve curves, you will need to use PI. Now do you want the value of PI to change? Hardly, PI is a classic example of a constant. Java allows you to create programs with identifiers that store values, almost the same as variables, but with some minor change the variable is now a constant, as demonstrated by program Java0312.java, in figure 3.15.
Figure 3.15
// Java0312.java
// This program demonstrates how to create "constant" identifier
// values with the <final> keyword.
// Removing the comments from the assignment statement
// will result in compile errors.
public class Java0312
{
public static void main (String args[])
{
final double PI = 3.141592653589793;
// PI = 2.718281828;
System.out.println();
System.out.println("PI: " + PI);
System.out.println();
}
}
Java0312.java Output with Comment in Place:
You may feel that Java0312.java is no different from many of the programs shown in this chapter. There is some odd-looking final keyword thrown in, but the output is no different than anything you saw with variables. You do have a good observation and the program contains a feature to satisfy your curiosity. Notice how one line is commented out. This line is meant to change the initial values of PI. In your math class, you should have learned that PI or π is a constant. By definition, a constant is something that cannot be changed. Well, what happens if you try to change a constant? Remove the // comment sym and recompile the program to find out. The error message shown in figure 3.16 should let you the Java compiler is not happy. Constants cannot be changed… period. Java called constants final variables because their value is final and cannot be changed.
Figure 3.16
3.9Documenting Your Programs
Program documentation is a major big deal. Perhaps to you it is a big deal because some irritating computer science teacher keeps after you to document your programs. There also seems to be an irritating author of this Java book who should have stayed in Europe and harass European kids rather than get on a soap-box in the United States.
You will not appreciate the need for documentation in a first year course. Once the programs you write reach a certain size, it is not possible to test, debug or alter such programs without proper documentation.
The first form of documentation is to use meaningful identifiers. Many of the previous programs used single-letter variables. That may be nice for short program statements, but your program is not very readable. Take a little extra time and make your identifiers long enough to explain their purpose in life. Program Java0313.java, shown in figure 3.17, is a short payroll program that uses variables with names that help to explain the program's purpose.
Figure 3.17
// Java0313.java
// This program demonstrates the use of self-commenting identifiers.
public class Java0313
{
public static void main (String args[])
{
double hoursWorked;
double hourlyRate;
double grossPay;
double deductions;
double netPay;
hoursWorked = 35;
hourlyRate = 8.75;
grossPay = hoursWorked * hourlyRate;
deductions = grossPay * 0.29;
netPay = grossPay - deductions;
System.out.println("Hours Worked: " + hoursWorked);
System.out.println("Hourly Rate: " + hourlyRate);
System.out.println("Gross Pay: " + grossPay);
System.out.println("Deductions: " + deductions);
System.out.println("Net Pay: " + netPay);
System.out.println();
}
}
Self-documenting identifiers are an excellent start, but there is more. Programs also need to use well-placed comments. At the start of a program you need to use a heading that explains some general information about the program. At this place it makes sense to use the slash-star comments that can span multiple lines. Program Java0314.java, in figure 3.18, demonstrates both types of comments. In particular, note how the comments extend the meaning of the self-documenting identifiers. For instance, the identifier hoursWorked is descriptive, but it is the comment, which explains that it means the number of hours worked per week.
Figure 3.18
// Java0314.java
// This program is identical to the previous program and it
// demonstrates the use of a multi-line header comment to
// explain the program.
/********************************************************************
** **
** Payroll Program **
** Written by Leon Schram 09-23-08 **
** **
** This program takes the hours worked and hourly rate of **
** an employee and computes the gross pay earned. **
** Federal deductions are computed as 29% of gross pay. **
** Finally the take-home pay or net pay is computed by **
** subtraction deductions from gross pay. **
** **
********************************************************************/
public class Java0314
{
public static void main (String args[])
{
double hoursWorked; // hours worked per week
double hourlyRate; // payrate earned per hour
double grossPay; // total earnings in a week
double deductions; // total federal tax deductions
double netPay; // employee take-home pay
hoursWorked = 35;
hourlyRate = 8.75;
grossPay = hoursWorked * hourlyRate;
deductions = grossPay * 0.29;
netPay = grossPay - deductions;
System.out.println("Hours Worked: " + hoursWorked);
System.out.println("Hourly Rate: " + hourlyRate);
System.out.println("Gross Pay: " + grossPay);
System.out.println("Deductions: " + deductions);
System.out.println("Net Pay: " + netPay);
System.out.println();
}
}
Figure 3.18 Continued
3.10 Mathematical Precedence
Java may not use all the exact same symbols for mathematical operations, but the precedence of operations is totally identical. Rules like multiplication/division before addition/subtraction and parentheses before anything else apply in Java. Parentheses are also used in the same manner as they are in mathematics. You do need to be careful that operators are always used. In mathematics, operators are frequently assumed, but not used. This is especially true for the multiplication operator. A small chart in figure 3.19 helps to clarify this point.
Figure 3.19
Be Aware of Hidden Operators in Mathematics
Mathematics
Java Source Code
5XY
4X + 3Y
6(A - B)
5
7
A + B
A - B
AB
XY
5*X*Y
4*X + 3*Y
6*(A - B)
5.0/7.0
(A + B)/(A - B)
(A * B)/(X * Y)
Mathematical precedence usually is not a problem for students. However, leaving out operators or parentheses, which are not required in regular mathematical expressions, is a common problem for beginning computer science students.
Program Java0315.java, in figure 3.20 demonstrates a variety of expressions that use mathematical precedence. You will also need to realize that mathematical accuracy is not always the same as computer accuracy. You saw earlier that the double type stores numbers more accurately than the float type. Numerical values are stored in memory and memory is frequently limited on purpose or accidentally. Either way, it is common that some mathematical accuracy may get sacrificed to save memory.
Figure 3.20
// Java0315.java
// This program demonstrates mathematical precedence in Java operations.
public class Java0320
{
public static void main (String args[])
{
double a,b,c, result;
a = 1000;
b = 100;
c = 2.5;
System.out.println("a = " + a + " b = " + b + " c = " + c);
result = a + b * c;
System.out.println("a + b * c = " + result);
result = (a + b) * c;
System.out.println("(a + b) * c = " + result);
result = a / b * c;
System.out.println("a / b * c = " + result);
result = a * b / c;
System.out.println("a * b / c = " + result);
System.out.println();
}
}
Figure 3.20 Continued
3.11 Summary
This chapter introduced the Java simple data types. A simple data type is simple because it stores a single value in memory. Simple data types are also called primitive data types. Program examples were shown that declared variables of a specified data type. Declaring the data type allows the compiler to allocate memory for the value to be stored.
int is used to store integer values and double is used to store real numbers. Java provides five operators for integers: addition, subtraction, multiplication, integer-division and modulus-division. Java provides four operators for real numbers: addition, subtraction, multiplication and real number division.
In Java there are many shortcut notations for both unary operators and binary operators. Every arithmetic operator can be expressed in a shortcut notation
Java can declare character and string variables. The plus operator is used for arithmetic addition with numbers and concatenation with strings. Concatenation means that a string is appended at the end of another string. The String data type is included with the simple data types because we treat it like a simple data type right now. A string does hold multiple character values, but we process the entire set of characters as a single unit. You will learn in a later chapter the true nature of the String data type.
This chapter also introduced the boolean data type. This data type can store the value true or the value false. Boolean is included with this chapter to make the chapter complete with all the available simple data types. The actual usage of boolean will be shown later.
Java has a peculiar variable, called a final variable that cannot change. I prefer to call this a constant. Declaring a constant is identical to declaring a variable with the reserved final in front of the data type.
It is important to document your programs. Start by selecting identifiers that are self-documenting. Single-character identifiers should be avoided in most cases. Programs should also make generous use of meaningful comments that help explain the purpose of program segments and certain program statements.
Java programs use the same mathematical precedence that is used in mathematical computation. Logically, there is no apparent difference between mathematics and computers science. Practically, there are some differences. In mathematics there are assumed operations, especially multiplication that needs to be explicitly shown in a Java program. It is sufficient to state AB + CD in mathematics. In Java such an expression needs to be A*B + C*D.
In the early days of your math courses only constants were used. You know what I mean. Numbers were 5, 13 and 127. You added, subtracted, multiplied and divided with numbers. Later, you had more fun with fractions and decimal numbers. At some point - and the exact year does not matter - variables were introduced. In science and mathematics it is useful to express formulas and certain relationships with variables that explain some general principle. If you drive at an average rate of 60 mph and you continue for 5 hours at that rate, you will cover 300 miles. On the other hand, if you drive at a rate of 45mph for 4 hours, you will travel 180 miles. These two problems are examples that only use constants. The method used for computing this type of problem can be expressed in a more general formula that states:
Distance = Rate ´ Time
The formula is normally used in its abbreviated form, which is d = r ´ t. In this formula d, r and t are variables. The meaning is literal. A variable is a value that is able to change. A constant like 5 will always be 5, but d is a variable, which changes with the values of r and t. Both r and t are also variables.
Variables make mathematics, science and computer science possible. Without variables you are very limited in the type of programs that you can write. In this chapter you will learn how to use variables in your programs.
3.2 Declaring Variables
A program is made up of words, which usually are called keywords. The keywords in a program have a very specific purpose, and only keywords are accepted by the compiler. A compiler will only create a bytecode file if the source code obeys all the Java syntax rules. The first rule is that only keywords known to the Java compiler can be used in a program. Another syntax rule is that each variable needs to specify its data type.
How about first concentrating on one rule at a time? So what exactly is a keyword? You have seen certain words like void, static and println, but that only tells part of the story. Keywords can be divided into three categories.
Java Keywords
· Reserved Words
· Pre-defined Java Identifiers
· User-defined Identifiers
Reserved Words
Reserved words are part of the Java language the same way that table, walk and mother are part of the English language. Each reserved word has a special meaning to Java and these reserved words cannot be used as an identifier for any other purpose in a program. Reserved words that you have seen so far are public, void and static.
Predefined Identifiers
Java has a large number of libraries that enhance the basic Java language. These libraries contain special program modules, called methods that perform a variety of tasks to simplify the life of a programmer. You have seen two methods so far: print and println. They are special routines that display output in a text window.
User-Defined Identifiers
The third and last type of word used in a program is selected by the programmer. Programmers need to select an identifier for each variable that is used in a program. Variables are used in a program for many purposes, which you will see shortly. You already have familiarity with the general concept of a variable from mathematics. It is possible to say distance = 60 * 10to compute the distance traveled at 60 mph for a 10 hour period. That statement comes from the general formula of d = r x t, which uses three variables. Make sure your identifier selection is neither a reserved word nor a predefined identifier. The rules for naming an identifier are simple. The identifier can use alphanumeric characters and the underscore character. Additionally, you need to be sure that the identifier starts with an alpha character. You will note that this rule is identical to the rule for naming the class identifier of your program.
Fine, you have accepted the need to declare the variables that are used in a program. You have sympathy with the compiler who needs to sort out the proper keywords from the typos, mistakes, and general attempts made by sometimes-clueless programmers. Of course, you do not fall in the clueless category. Now what about this second syntax rule mentioned earlier, something about indicating a data type with a variable? What is that all about?
The data type rule is for the purpose of using memory efficiently. All variable values need to be stored in memory during program execution. As long as the program is alive and the variable is in use, its value will be stored somewhere in RAM. It is certainly possible to skip the whole data type scene and give the same exact memory to each variable. Now is that not the same as stating that every room in a building needs to be the same size? How about meeting rooms, closets, offices, bathrooms and dining halls; should they all be the same size? No, that is too silly; a room size is designed for its purpose. Building materials are expensive and lease rates are outrageous. A thrifty business person makes sure to rent the proper amount of space; no more and no less.
Variables are needed to store information such as a single character, which can be placed in one byte or two bytes of memory. Other variables store large numbers that require four or eight bytes of memory. There are also variables that need to store the street address of a customer. Such values may require around 50 bytes of memory. The efficient and practical approach is to declare all variables before they are used and let the compiler know how much memory is required. Once the compiler sees the data type of the variable, memory space will be reserved or allocated for the specified data type.
There is a good selection of simple data types in Java, but for starters take a look at program Java0301.java. That program uses an integer data type, which is abbreviated int in Java. In figure 3.1 you see that the data type, int,starts the declaration statement, followed by the variable identifier, which in this case is either a or b. This program also introduces the assignment statement, which is a statement that assigns a value to a variable. The equal sign is the assignment operator, and does not create an equation. Novice programmers often think that a program statement, like a = 10;is an equation. Such a statement should be read as a becomes 10 or 10 is assigned to a, but not a equals 10.
Figure 3.1
// Java0301.java
// This program demonstrates how to declare integer variables with <int>,
// and it shows how to display the value of a variable with <println>.
public class Java0301
{
public static void main (String args[])
{
int a;
int b;
a = 10;
b = 25;
System.out.println();
System.out.println(a);
System.out.println(b);
System.out.println();
}
}
Java is picky about a variety of things and pickiness in a language is good or bad depending on your point of view. Experienced programmers like a program language to be relaxed and give them lots of slack. Novice programmers benefit more from a tight leash that allows little breathing space. Most people agree that Java does not let you jump around much. As a matter of fact, Java insists that a variable is assigned a value before the variable value is used. You declare the variable, so you see to it that it gets a value. Look at Java0302.java in figure 3.2. That program will not even compile.
Figure 3.2
// Java0302.java
// This program is Java0301.java without assigning values to the variables. Java does
// not compile a program that attempts to use unassigned "simple" data types.
public class Java0302
{
public static void main (String args[])
{
int a;
int b;
System.out.println(a);
System.out.println(b);
}
}
Figure 3.2 Continued
Program Java0302.java is almost identical to the previous program minus the assignment statements. This makes Java very unhappy and you are rewarded with some error messages that let you know your evil programming ways. Java is polite though. The error message says that the variable might not have been initialized, and we both know that there is no initialization in sight. The output you see is shown at the bottom of the JCreator IDE. Click on the Build Output tab. You may be looking at the Task List window, which is similar.
It is a good habit to assign an initial value to a variable as soon as the variable is declared. It takes less program code to use such an approach and you remember to take care of the variable the same time that you first introduce the variable to your compiler. It is possible to combine the declaration statement and the assignment statement into one program statement. This is shown in figure 3.3 by program Java0303.java, and you will note that it produces the exact same output as the earlier program shown in figure 3.1.
Figure 3.3
// Java0303.java
// This program demonstrates that it is possible to declare a variable
// identifier and initialize the variable in the same statement.
// It is a good habit to initialize variables where they are declared.
public class Java0303
{
public static void main (String args[])
{
int a = 10;
int b = 25;
System.out.println();
System.out.println(a);
System.out.println(b);
System.out.println();
}
}
Figure 3.3 Continued
The early program examples in the last chapter displayed string literals, which were contained between the quotes of a println statement. Now you see that the double quotes are gone, and the value of the variable is displayed by println. You are probably quite impressed by this humble Java println method, but wait there is more. You can combine the literal character string output with the variable value output by using the plus operator, as is shown by program Java0304.java, in figure 3.4.
Figure 3.4
// Java0304.java
// This program combines output of literals and variables.
// "a: " is a string literal, which displays the characters a:
// a is an integer variable, which displays its integer value 10.
public class Java0304
{
public static void main (String args[])
{
int a = 10;
int b = 25;
System.out.println("a: " + a);
System.out.println("b: " + b);
}
}
3.3 The int Data Type
The previous section introduced the notion of declaring variables. You will see many more program examples with variable declarations. In an attempt to be organized, the additional program examples will be shown in a section for each data type. You did already see some examples with the int data type, but as you will see there is quite a bit more to be said about integers. You also need to know how to perform arithmetic operations with integers.
The int data type in Java has five arithmetic operations. You may have expected the four basic operations of addition, subtraction, multiplication and division, but Java adds modulus division to the list. Look at program Java0305.java in figure 3.5, which demonstrates each one of the operations.
Figure 3.5
// Java0305.java
// This program demonstrates the five integer operations.
public class Java0305
{
public static void main (String args[])
{
int a = 0;
int b = 25;
int c = 10;
a = b + c; // Addition
System.out.println(b + " + " + c + " = " + a);
a = b - c; // Subtraction
System.out.println(b + " - " + c + " = " + a);
a = b * c; // Multiplication
System.out.println(b + " * " + c + " = " + a);
a = b / c; // Integer Division
System.out.println(b + " / " + c + " = " + a);
a = b % c; // Remainder Division
System.out.println(b + " % " + c + " = " + a);
}
}
There is little explanation needed for addition, subtraction and multiplication. Your biggest concern is that you need to remember to use an asterisk * for multiplication. Division can be a little confusing. Java recognizes two types of division: integer division and modulus or remainder division. Look at the examples in figure 3.6 and figure 3.7 to understand the difference between the two types of division.
Figure 3.6 Integer Division Examples
12 / 3 = 4
12 / 4 = 3
12 / 5 = 2
12 / 8 = 1
12 / 12 = 1
12 / 15 = 0
Figure 3.7
Modulus (remainder) Division Examples
12 % 3 = 0
12 % 4 = 0
12 % 5 = 2
12 % 8 = 4
12 % 12 = 0
12 % 15 = 12
It might be good to take a trip down memory lane -- back to when you first learned about long division. Look at the 5 examples in figure 3.8 on the next page.
Figure 3.8
3.4 The double Data Type
Integers are nice and used for many purposes, but there are also many other computations that require fractions. In science, industry and business, fractions are a way of life. For instance, interest on bank loans and savings accounts are computed as percentages of the principal amount, and percentages involve computation with fractions.
You have seen that in Java, the data type we use for integers is int. This is nice and logical. Now we come to real numbers. You might already be thinking that there is a real data type to store real numbers. This would especially be true if you have programmed in a language like Pascal, which has a real data type. However, in Java the data type for real numbers is called double.
Now I know what your next question is, "What in the world does double have to do with real numbers?" This question is very logical and there is a logical answer. Java actually has 2 data types for real numbers. The first is not very accurate and we will not be using it. The second uses twice as much memory allowing it to be twice as accurate. This is where the term double comes from. It is a double precision real number.
Program Java0306.java, in figure 3.9, is designed to demonstrate the double data type as well as the four real number operations. These are essentially the same as the integer operations. There is still addition, subtraction, and multiplication. What is different is division.
When integers are divided you get an integer quotient with an integer remainder.
Example: 7 / 2 = 3 remainder 1
When real numbers are divided, there is a real number quotient and no remainder.
Example: 7.0 / 2.0 = 3.5
Figure 3.9
// Java0306.java
// This program introduces the real number type <double>.
// This program demonstrates the four real number operations.
public class Java0306
{
public static void main (String args[])
{
double d1 = 0;
double d2 = 10.0;
double d3 = 3.33333333;
d1 = d2 + d3;
System.out.println(d2 + " + " + d3 + " = " + d1);
d1 = d2 - d3;
System.out.println(d2 + " - " + d3 + " = " + d1);
d1 = d2 * d3;
System.out.println(d2 + " * " + d3 + " = " + d1);
d1 = d2 / d3;
System.out.println(d2 + " / " + d3 + " = " + d1);
System.out.println();
}
}
3.5 Arithmetic Shortcut Notations
The language C started a shortcut trend with operators. This trend continued with C++, and Java adopted the popular shortcuts founded by the older C programming language. Shortcuts are popular with programmers. This section will show you the available shortcuts.
Program Java0307.java demonstrates the Java unary operators, which are operators with a single operand. This could look strange to you because in your previous exposure to mathematical notation you probably only saw binary operators. The program example in figure 3.10 shows both the ++ and -- unary operators. ++ is a shortcut to add 1 to a variable, and -- is a shortcut to subtract 1.
Figure 3.10
// Java0307.java
// This program shows "unary" arithmetic shortcut notation in Java.
// ++ will add 1 to a variable and -- will subtract 1.
public class Java0307
{
public static void main (String args[])
{
int num = 10;
System.out.println("num equals " + num);
num++;
System.out.println("num equals " + num);
num++;
System.out.println("num equals " + num);
num++;
System.out.println("num equals " + num);
num++;
System.out.println("num equals " + num);
num--;
System.out.println("num equals " + num);
num--;
System.out.println("num equals " + num);
num--;
System.out.println("num equals " + num);
num--;
System.out.println("num equals " + num);
System.out.println();
}
}
NOTE: Some people use ++num instead of num++ and --num instead of num--.
Figure 3.10 Continued
Java Unary Operators
k++; is the same as: k = k + 1;
k--; is the same as: k = k - 1;
Proper Usage:
int k = 5;
k++;
System.out.println(k);
k--;
System.out.println(k);
Unary operators are lovely, but they are quite limited. Incrementing by one or decrementing by one can be quite boring. Sometimes you want to go for broke and increment by two, three or maybe even ten. Are there shortcuts for such type of operations? There sure are and every binary operations that was shown earlier in this chapter has a shortcut equivalent.
Binary operators have shortcuts, and like unary shortcuts, there are potential pitfalls where program statements can be quite ambiguous. Shortcuts are good, but there is such a thing as too much of a shortcut and this can make a program difficult to debug, comprehend and update. Right now examine Java0308.java in figure 3.11 and observe the shortcut syntax of binary operations.
Figure 3.11
// Java0308.java
// This program shows arithmetic assignment operations in Java.
// x+=10; is the same as x = x + 10;
public class Java0308
{
public static void main (String args[])
{
int x = 10;
System.out.println("x equals " + x);
x += 10;
System.out.println("x equals " + x);
x -= 10;
System.out.println("x equals " + x);
x *= 10;
System.out.println("x equals " + x);
x /= 10;
System.out.println("x equals " + x);
x %= 10;
System.out.println("x equals " + x);
System.out.println();
}
}
Binary Operator Shortcuts
No Shortcut Notation
Shortcut Notation
k = k + 5
k = k - 5
k = k * 5
k = k / 5
k = k % 5
k += 5
k -= 5
k *= 5
k /= 5
k %= 5
3.6 The char & String Data Types
The very first Java program you saw in this book used only strings. Strings are extremely common. It is a string of characters that forms a word, and it is a string of words that forms a sentence. Java processes characters and strings with two data types. There is the char data type for processing individual characters, and there is the String data type for processing sets of one or more characters.
In previous programs you have observed that a string of characters is contained between double quotes. That is still very true. There is a small difference for a single character, which needs to be contained between two single quotes.
Program Java0309.java, in figure 3.12, starts by concentrating on the humble char data type. Three different character variables are declared and initialized. This program also demonstrates that chain assignment is possible. This is another type of shortcut. In one program statement the character 'Q' is assigned to all three variables.
Figure 3.12
// Java0309.java
// This program demonstrates the <char> data types.
// It also demonstrates how assignment can be "chained" with
// multiple variables in one statement.
public class Java0314
{
public static void main (String args[])
{
char c1 = 'A';
char c2 = 'B';
char c3 = 'C';
System.out.println("The three characters are: " + c1 + c2 + c3);
c1 = c2 = c3 = 'Q';
System.out.println("The three characters are: " + c1 + c2 + c3);
System.out.println();
}
}
If excitement is your goal in life then char is not going to provide much. It is pretty much a dull data type. String is a great deal more interesting. Now you might argue that excitement has been seriously lacking from all this variable stuff. Like, where are the spaceships shooting photon torpedoes? Well those photon torpedoes are used a lot in a variety of Star Trek episodes and students in AP Computer Science might wish to create a program that performs that type of sophistication.
Right now your excitement revolves around variables. The topic at hand is the String data type and watch with amazement as you see the next program Java0310.java, in figure 3.13, combine various string variables together in seamless perfection. It is not the high of skiing in fresh powder, but it is much cheaper.
Figure 3.13
// Java0310.java
// This program demonstrates the <String> data type.
public class Java0310
{
public static void main (String args[])
{
String firstName = "Kathy" ;
String lastName = "Smith";
System.out.println("firstName: " + firstName);
System.out.println("lastName: " + lastName);
System.out.println("Complete Name: " + firstName + " " + lastName);
System.out.println();
}
}
Did you observe that strings are performing addition here? At least the plus operator is used and it seems that some type of adding is going on. There is a form of addition shown here that is peculiar to strings, and a lovely name exists for this operation, known as concatenation. This is an example of overloading the plus operator. The same exact operator performs totally different functions with numbers and with strings.
String Concatenation
Concatenation is the joining together of two or more strings.
"Hello" + "World" = "HelloWorld"
"Hello" + " " + "World" = "Hello World"
"100" + "200" = "100200"
The plus operator ( + ) is used both for arithmetic addition
and string concatenation. The same operator performs
two totally different operations. This is called overloading.
3.7 The boolean Data Type
More than a century ago there was a mathematician, George Boole, who developed a new branch of mathematics. His mathematics did not involve arithmetic nor Algebra, but logical statements that are either true or false. This new branch of mathematics was named Boolean Algebra after its founder. Today, in computer science, a data type that has only two values of true and false is a called a Boolean data type, and in Java you use the reserved word, boolean.
Program example Java0311.java, in figure 3.14 demonstrates the proper syntax to declare a Boolean variable, but it does not explain how to use Boolean variables. The boolean data type is included here to complete the simple data types. You will learn in later chapters how to use this very unique data type.
Figure 3.14
// Java0311.java
// This program demonstrates the <boolean> data type.
// The boolean type can only have two values: true or false.
public class Java0311
{
public static void main (String args[])
{
boolean value = true;
System.out.println("value: " + value);
value = false;
System.out.println("value: " + value);
System.out.println();
}
}
3.8 Declaring Constants
We are done with simple data types. In more formal language Java's simple data types are called primitive data type. You have seen them all and they will provide a base for many of your programs in the beginning of this course. But you are not done with this chapter. There are a few related topics that link to simple data types. So far all the data types were used with a variable declaration and variable implies that some initialized value is able to change or vary.
Now what if you want to store a value somewhere in memory for a specified data type, but you do not want the value to change? If you write a program that computes a variety of areas and volumes that involve curves, you will need to use PI. Now do you want the value of PI to change? Hardly, PI is a classic example of a constant. Java allows you to create programs with identifiers that store values, almost the same as variables, but with some minor change the variable is now a constant, as demonstrated by program Java0312.java, in figure 3.15.
Figure 3.15
// Java0312.java
// This program demonstrates how to create "constant" identifier
// values with the <final> keyword.
// Removing the comments from the assignment statement
// will result in compile errors.
public class Java0312
{
public static void main (String args[])
{
final double PI = 3.141592653589793;
// PI = 2.718281828;
System.out.println();
System.out.println("PI: " + PI);
System.out.println();
}
}
Java0312.java Output with Comment in Place:
You may feel that Java0312.java is no different from many of the programs shown in this chapter. There is some odd-looking final keyword thrown in, but the output is no different than anything you saw with variables. You do have a good observation and the program contains a feature to satisfy your curiosity. Notice how one line is commented out. This line is meant to change the initial values of PI. In your math class, you should have learned that PI or π is a constant. By definition, a constant is something that cannot be changed. Well, what happens if you try to change a constant? Remove the // comment sym and recompile the program to find out. The error message shown in figure 3.16 should let you the Java compiler is not happy. Constants cannot be changed… period. Java called constants final variables because their value is final and cannot be changed.
Figure 3.16
3.9Documenting Your Programs
Program documentation is a major big deal. Perhaps to you it is a big deal because some irritating computer science teacher keeps after you to document your programs. There also seems to be an irritating author of this Java book who should have stayed in Europe and harass European kids rather than get on a soap-box in the United States.
You will not appreciate the need for documentation in a first year course. Once the programs you write reach a certain size, it is not possible to test, debug or alter such programs without proper documentation.
The first form of documentation is to use meaningful identifiers. Many of the previous programs used single-letter variables. That may be nice for short program statements, but your program is not very readable. Take a little extra time and make your identifiers long enough to explain their purpose in life. Program Java0313.java, shown in figure 3.17, is a short payroll program that uses variables with names that help to explain the program's purpose.
Figure 3.17
// Java0313.java
// This program demonstrates the use of self-commenting identifiers.
public class Java0313
{
public static void main (String args[])
{
double hoursWorked;
double hourlyRate;
double grossPay;
double deductions;
double netPay;
hoursWorked = 35;
hourlyRate = 8.75;
grossPay = hoursWorked * hourlyRate;
deductions = grossPay * 0.29;
netPay = grossPay - deductions;
System.out.println("Hours Worked: " + hoursWorked);
System.out.println("Hourly Rate: " + hourlyRate);
System.out.println("Gross Pay: " + grossPay);
System.out.println("Deductions: " + deductions);
System.out.println("Net Pay: " + netPay);
System.out.println();
}
}
Self-documenting identifiers are an excellent start, but there is more. Programs also need to use well-placed comments. At the start of a program you need to use a heading that explains some general information about the program. At this place it makes sense to use the slash-star comments that can span multiple lines. Program Java0314.java, in figure 3.18, demonstrates both types of comments. In particular, note how the comments extend the meaning of the self-documenting identifiers. For instance, the identifier hoursWorked is descriptive, but it is the comment, which explains that it means the number of hours worked per week.
Figure 3.18
// Java0314.java
// This program is identical to the previous program and it
// demonstrates the use of a multi-line header comment to
// explain the program.
/********************************************************************
** **
** Payroll Program **
** Written by Leon Schram 09-23-08 **
** **
** This program takes the hours worked and hourly rate of **
** an employee and computes the gross pay earned. **
** Federal deductions are computed as 29% of gross pay. **
** Finally the take-home pay or net pay is computed by **
** subtraction deductions from gross pay. **
** **
********************************************************************/
public class Java0314
{
public static void main (String args[])
{
double hoursWorked; // hours worked per week
double hourlyRate; // payrate earned per hour
double grossPay; // total earnings in a week
double deductions; // total federal tax deductions
double netPay; // employee take-home pay
hoursWorked = 35;
hourlyRate = 8.75;
grossPay = hoursWorked * hourlyRate;
deductions = grossPay * 0.29;
netPay = grossPay - deductions;
System.out.println("Hours Worked: " + hoursWorked);
System.out.println("Hourly Rate: " + hourlyRate);
System.out.println("Gross Pay: " + grossPay);
System.out.println("Deductions: " + deductions);
System.out.println("Net Pay: " + netPay);
System.out.println();
}
}
Figure 3.18 Continued
3.10 Mathematical Precedence
Java may not use all the exact same symbols for mathematical operations, but the precedence of operations is totally identical. Rules like multiplication/division before addition/subtraction and parentheses before anything else apply in Java. Parentheses are also used in the same manner as they are in mathematics. You do need to be careful that operators are always used. In mathematics, operators are frequently assumed, but not used. This is especially true for the multiplication operator. A small chart in figure 3.19 helps to clarify this point.
Figure 3.19
Be Aware of Hidden Operators in Mathematics
Mathematics
Java Source Code
5XY
4X + 3Y
6(A - B)
5
7
A + B
A - B
AB
XY
5*X*Y
4*X + 3*Y
6*(A - B)
5.0/7.0
(A + B)/(A - B)
(A * B)/(X * Y)
Mathematical precedence usually is not a problem for students. However, leaving out operators or parentheses, which are not required in regular mathematical expressions, is a common problem for beginning computer science students.
Program Java0315.java, in figure 3.20 demonstrates a variety of expressions that use mathematical precedence. You will also need to realize that mathematical accuracy is not always the same as computer accuracy. You saw earlier that the double type stores numbers more accurately than the float type. Numerical values are stored in memory and memory is frequently limited on purpose or accidentally. Either way, it is common that some mathematical accuracy may get sacrificed to save memory.
Figure 3.20
// Java0315.java
// This program demonstrates mathematical precedence in Java operations.
public class Java0320
{
public static void main (String args[])
{
double a,b,c, result;
a = 1000;
b = 100;
c = 2.5;
System.out.println("a = " + a + " b = " + b + " c = " + c);
result = a + b * c;
System.out.println("a + b * c = " + result);
result = (a + b) * c;
System.out.println("(a + b) * c = " + result);
result = a / b * c;
System.out.println("a / b * c = " + result);
result = a * b / c;
System.out.println("a * b / c = " + result);
System.out.println();
}
}
Figure 3.20 Continued
3.11 Summary
This chapter introduced the Java simple data types. A simple data type is simple because it stores a single value in memory. Simple data types are also called primitive data types. Program examples were shown that declared variables of a specified data type. Declaring the data type allows the compiler to allocate memory for the value to be stored.
int is used to store integer values and double is used to store real numbers. Java provides five operators for integers: addition, subtraction, multiplication, integer-division and modulus-division. Java provides four operators for real numbers: addition, subtraction, multiplication and real number division.
In Java there are many shortcut notations for both unary operators and binary operators. Every arithmetic operator can be expressed in a shortcut notation
Java can declare character and string variables. The plus operator is used for arithmetic addition with numbers and concatenation with strings. Concatenation means that a string is appended at the end of another string. The String data type is included with the simple data types because we treat it like a simple data type right now. A string does hold multiple character values, but we process the entire set of characters as a single unit. You will learn in a later chapter the true nature of the String data type.
This chapter also introduced the boolean data type. This data type can store the value true or the value false. Boolean is included with this chapter to make the chapter complete with all the available simple data types. The actual usage of boolean will be shown later.
Java has a peculiar variable, called a final variable that cannot change. I prefer to call this a constant. Declaring a constant is identical to declaring a variable with the reserved final in front of the data type.
It is important to document your programs. Start by selecting identifiers that are self-documenting. Single-character identifiers should be avoided in most cases. Programs should also make generous use of meaningful comments that help explain the purpose of program segments and certain program statements.
Java programs use the same mathematical precedence that is used in mathematical computation. Logically, there is no apparent difference between mathematics and computers science. Practically, there are some differences. In mathematics there are assumed operations, especially multiplication that needs to be explicitly shown in a Java program. It is sufficient to state AB + CD in mathematics. In Java such an expression needs to be A*B + C*D.