02-基本程序设计
- 2.1 引言
- 学习程序设计基础技术,以进行问题的求解。
- 2.2 编写简单的程序
- 在源代码中,字符串常量不能跨行,因此,下面的的语句就会导致错误。
```java
package chapter01;
public class Code_10 {
public static void main(String[] args){
System.out.println("Introduction to Java Progranmming,a
by xxx");
}
}
```
那么正确的代码是:
```java
package chapter01;
public class Code_10 {
public static void main(String[] args){
System.out.println("Introduction to Java Progranmming," +
"by xxx");
}
}
```
- 2.3 从控制台读取输入
- 可以使用Scanner类从控制台输入。Java使用System.out来表示标准输出设备,用System.in来表示标准输入设备。
- 示例:
```java
Scanner input=new Scanner(System.in);
```
- 可以使用nextDouble()方法来获取一个double类型的值。当然这样类似的方法有很多(next()、nextInt()、nextFloat()......),不仅仅是这一种。至于这几种方法之间的区别,[点击这里查看](https://blog.csdn.net/a_yingxuexin/article/details/51842533)。
```java
package chapter01;
import java.util.Scanner;
public class Code_10 {
public static void main(String[] args){
Scanner input=new Scanner(System.in);
double s=input.nextDouble();
}
}
```
- Scanner类位于java.util包中,在第3行导入,第6行创建了一个Scanner对象,如果第6行用java.util.Scanner代替Scanner的话,import是可以直接省略的。
- 这里顺便讲述一下print和println方法。print和println方法功能类似,两者的不同之处在于:当显示字符串之后,println会将光标移至下一行,而print则不会这样。
- 有两种类型的import语句:(二者的执行效率基本一样)
- 明确导入:是在import语句中指定单个的类。
```java
import java.util.Scanner;
```
- 通配符导入:是指通过使用星号(*)作通配符,导入一个包中所有的类。
```java
import java.util.*;
```
- 2.4 标识符
- 标识符的规则:
- 标识符是由字母、数字、下划线(_)和美元符号($)构成的字符序列。
- 标识符必须以字母、下划线(_)和美元符号($)开头,不能以数字开头。
- 标识符不能是保留字。
- 标识符不能是true、false、null。
- 标识符可以为任意长度。
- Java是区分大小写的。
- 不要用字符$命名标识符。习惯上,字$只用在机器自动产生的源代码中。
- 标识符的规则:
- 2.5 变量
- 在赋值给变量之前,必须声明变量。方法中声明的变量在使用之前必须被赋值。
- 2.6 赋值语句和赋值表达式
- 在Java中,将等号(=)作为赋值操作符。赋值语句的语法如下:
```java
variable=expression;//(变量=表达式)
```
- 可以在表达式中使用变量。变量还可以同时出现在赋值操作符=的两边。
```java
x = x + 1;
```
- 在赋值语句中,左边变量的数据类型必须与右边变量的数据类型兼容。例如,int x=1.0是错误的,因为1.0是double类型的,这样的数据是不能直接赋值给int类型的变量的。
- 2.7 命名变量
- 命名变量是一个代表不变值的标识符。
- Java中常量也称为final修饰的变量。下面是生命常量的语法:
```java
final datatype CONSTANTNAME=value;
```
- 常量必须在同一条语句中生声明和赋值。习惯上,常量中的所有字母都是大写的。
- 使用常量的三大好处:
- 1、当一个值多处使用的时候,不必重复输入。
- 2、如果必须修改常量值,只需在源代码中的一个地方做改动。
- 3、给常量赋一个描述性的名字会提高程序的可读性。
-
2.8 命名习惯
- 使用小写字母命名变量和方法,如果一个命名包含多个单词,就讲他们连在一起,第一个单词的字母小写,而后面的每个单词的首字母大写。例如,变量numberOfStudents。这样的命名风格称为驼峰命名法。
- 类名中的每个单词的首字母大写。
- 常量中的所有字母大写,两个单词间用下划线连接。例如,常量PI和常量MAX_VALUE。
- 命名类时不要选择Java库中已经使用的名称。
-
2.9 数值数据类型和操作
- 2.9.1 数值类型
- Java使用四种类型的整数:byte、short、int和long。
- Java使用两种类型的浮点数:float和double。
- 2.9.2 从键盘读取数值
<center>Scanner对象的方法</center>
方法 描述 nextByte() 读取一个byte类型的整数 nextShort() 读取一个short类型的整数 nextInt() 读取一个int类型的整数 nextLong() 读取一个long类型的整数 nextFloat() 读取一个float类型的数 nextDouble() 读取一个double类型的数 - 2.9.3 数值操作符
- 当除法的操作数都是整数时,除法的结果就是整数,小数部分被舍去。为了实现浮点数的除法,其中一个操作数必须是浮点数。
- 操作符%通常用在正整数上,实际上他也可以用于负整数和浮点值。只有当被除数是负数时,余数才是负的。
- 2.9.1 数值类型
```java
package chapter01;
public class Code_10 {
public static void main(String[] args){
System.out.println(3+1);
System.out.println(3.0+1);
System.out.println(3-1);
System.out.println(3.0-1);
System.out.println(3*1);
System.out.println(3.0*1);
System.out.println(3/2);
System.out.println(3.0/2);
System.out.println(-3.0/2);
System.out.println(3.0/-2);
System.out.println(3%2);
System.out.println(3%-2);
System.out.println(-3%2);
}
}
```
结果显示:
```java
4
4.0
2
2.0
3
3.0
1
1.5
-1.5
-1.5
1
1
-1
Process finished with exit code 0
```
- 2.9.4 幂运算
- Math.pow(a,b)
-
2.10 数值型字面值
字面值是程序中直接出现的常量值。例如,下面的语句中34和0.305都是字面值。int numberOfYears = 34; double weight = 0.305;
- 2.10.1 整型字面值
- 默认情况下,整型字面值是一个十进制整数。要表示一个二进制整数字面值,在数字面前使用0b或者0B(零B);要表示一个八进制整数字面值,在数字前使用0(零);而要表示一个十六进制整数字面值,在数字前使用0x或者0X(零X)。例如:
- 2.10.1 整型字面值
```java
package chapter01;
public class Code_10 {
public static void main(String[] args){
System.out.println(0B1111);//Displays 15
System.out.println(07777);//Displays 4095
System.out.println(0XFFFF);//Displays 65535
}
}
```
- 为了提高可读性,Java允许在一个数值型字面值的两个数字间使用下划线。例如,下面的字面值是正确的:
```java
long ssn = 232_45_4519;
long creditCardNumber = 2324_4545_4519_3415L;
```
然而,45_和_45是不正确的,下划线必须在两个数字之间的。
- 2.10.2 浮点型字面值
- 2.10.3 科学计数法
- 浮点型字面值也可以用a x 10^b形式的科学计数法表示。
- 2.11 表达式求值以及操作符优先级
- 操作符的优先级规则用于确定计算的次序:首先计算乘法、除法和求余计算。如果表达式包含若干个乘法、除法和求余操作符,可按照从左到右的顺序执行。最后执行加法和减法运算。如果表达式中包含若干个加法和减法操作符,则按照从左到右的顺序执行。
- 2.12 示例学习:显示当前时间
- 可以通过调用System.currentTimeMillis()返回当前时间。
```java
package chapter01;
public class ShowCurrentTime {
public static void main(String[] args){
long totalMilliseconds = System.currentTimeMillis();
long totalSeconds = totalMilliseconds / 1000;
long currentSecond = totalSeconds % 60;
long totalMinutes = totalSeconds / 60;
long currentMinute = totalMinutes % 60;
long totalHours = totalMinutes / 60;
long currentHour = totalHours % 24;
System.out.println("Current time is " + currentHour + ":" + currentMinute + ":" + currentSecond + " GMT");
}
}
```
- 2.13 增强赋值操作符
操作符+ 、-、*、/、%可以结合赋值操作符形成增强操作符。
<center>简捷赋值操作符</center>
| 操作符 |名称 |示例|等价于|
|--|--|--|--|
| += | 加法赋值操作符 | i += 8 | i =i + 8|
| -=| 减法赋值操作符| i -= 8 | i =i - 8 |
| *=| 乘法赋值操作符| i *= 8 | i =i * 8 |
| /=| 除法赋值操作符| i /= 8 |i =i / 8 |
| %= | 求余赋值操作符| i %= 8 | i =i % 8 |在增强操作符中是没有空格的。例如,+ =应该是+=。
- 2.14 自增和自减操作符
- 自增操作符(++)和自减操作符(--)对变量进行加1和减1的操作。
- i++读为i加加,i--读为i减减,这些操作符分别称为后置自增操作符和后置自减操作符,因为操作符++和--放在变量后面。
- ++i将i加1,--i将i减1。这些操作符称为前置自增操作符和前置自减操作符。
- 2.15 数值类型转换
- 总是可以将一个数值赋给支持更大数值范围的类型的变量,如果不进行类型转换,就不能将一个值赋给范围较小的类型的变量。将范围较小的类型转换为范围更大的类型称为扩展类型,而将范围较大的类型转换为范围较小的类型称为缩小类型。Java将自动扩展为一个类型,但是缩小类型必须显示完成。
- 使用类型转换时必须小心,丢失的信息也许会导致不精确的结果。
- 类型转换不改变被转换的变量。
```java
package chapter01;
public class Try {
public static void main(String[] args){
double sum=1;
System.out.println((int)sum);
int s=1;
System.out.println((byte)s);
}
}
```
- Java中,x1 op= x2形式的增强赋值表达式实现为x1 =(T)(x1 op x2),这里T是x1的类型。
```java
package chapter01;
public class Try {
public static void main(String[] args){
int sum = 0;
sum += 4.5;
System.out.println(sum);//答案是4
sum = (int)(sum + 4.5);
System.out.println(sum);//答案是8
}
}
```
-
2.16 软件开发过程
- 软件开发生命周期是一个多阶段的过程,包括需求规范、分析、设计、实现、测试、部署和维护。
-
2.17 示例学习:整钱兑零
package chapter01; import java.util.Scanner; public class ComputerChange { public static void main(String[] args){ Scanner input = new Scanner(System.in); System.out.print("Enter an amount in double, for example 11.56: "); double amount = input.nextDouble(); int remainAmount = (int)(amount * 100); int numberOfOneDollars = remainAmount / 100; remainAmount = remainAmount % 100; int numberOfOneQuarters = remainAmount / 25; remainAmount = remainAmount % 25; int numberOfDimes = remainAmount / 10; remainAmount = remainAmount % 10; int numberOfNickels = remainAmount / 5; remainAmount = remainAmount % 5; int numberOfPennies = remainAmount; System.out.println("Your amount " + amount + "consists of"); System.out.println(" " + numberOfOneDollars + " dollars"); System.out.println(" " + numberOfOneQuarters + "quarters"); System.out.println(" " + numberOfDimes + "dimes"); System.out.println(" " + numberOfNickels + "nickels"); System.out.println(" " + numberOfPennies + "pennies"); } }
-
2.18 常见错误和陷进
常见错误1:未声明、未初始化的变量和未使用的变量
常见错误2:整数溢出
常见错误3:舍入错误
常见错误4:非预期的整数除法
-
常见陷进:冗余的输入对象
这是不好的代码:Scanner input = new Scanner(System.in); System.out.print("Enter an integer: "); int v1 = input.nextInt(); Scanner input1 = new Scanner(System.in); System.out.print("Enter a double value: "); double v2 = input.nextDouble();
重写代码之后应该是这样的:
Scanner input = new Scanner(System.in); System.out.print("Enter an integer: "); int v1 = input.nextInt(); System.out.print("Enter a double value: "); double v2 = input.nextDouble();
-
编程小习题:
-
1、在这里插入图片描述
package chapter02; import java.util.Scanner; public class Code_01 { public static void main(String[] args){ Scanner input = new Scanner(System.in); System.out.print("Enter a degree in Celsius: "); double temprature = input.nextDouble(); double chinaTemprature = temprature * (9.0/5) + 32; System.out.format("%.1f Celsius is %.1f Fahrenheit",temprature,chinaTemprature); } }
-
2、在这里插入图片描述
package chapter02; import java.util.Scanner; public class Code_06 { public static void main(String[] args){ Scanner input = new Scanner(System.in); System.out.print("Enter a number between 0 and 1000: "); int number = input.nextInt(); int ge = number % 10; int more1 = number / 10; int shi = more1 % 10; int more2 = more1 / 10; int sum = more2 + ge + shi; System.out.format("The sum of digits is %d",sum); } }
-
3、
[图片上传失败...(image-8df476-1601875110821)]
在这里插入图片描述package chapter02; import java.util.Scanner; public class Code_13 { public static void main(String[] args){ Scanner input = new Scanner(System.in); System.out.print("Enter the monthly saving amount: "); double save = input.nextDouble(); for(int i = 0;i < 5;i++){ save = (100 + save) * (1 + 0.00417); } System.out.format("After the sixth month, the account value is $%.2f",save); } }
-
1、