02-基本程序设计
-
2.1 引言
- 学习程序设计基础技术,以进行问题的求解。
-
2.2 编写简单的程序
-
在源代码中,字符串常量不能跨行,因此,下面的的语句就会导致错误。
package chapter01; public class Code_10 { public static void main(String[] args){ System.out.println("Introduction to Java Progranmming,a by xxx"); } }
那么正确的代码是:
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来表示标准输入设备。
-
示例:
Scanner input=new Scanner(System.in);
-
可以使用nextDouble()方法来获取一个double类型的值。当然这样类似的方法有很多(next()、nextInt()、nextFloat()…),不仅仅是这一种。至于这几种方法之间的区别,点击这里查看。
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语句中指定单个的类。
import java.util.Scanner;
-
通配符导入:是指通过使用星号(*)作通配符,导入一个包中所有的类。
import java.util.*;
-
-
-
2.4 标识符
- 标识符的规则:
- 标识符是由字母、数字、下划线(_)和美元符号($)构成的字符序列。
- 标识符必须以字母、下划线(_)和美元符号($)开头,不能以数字开头。
- 标识符不能是保留字。
- 标识符不能是true、false、null。
- 标识符可以为任意长度。
- Java是区分大小写的。
- 不要用字符$命名标识符。习惯上,字$只用在机器自动产生的源代码中。
- 标识符的规则:
-
2.5 变量
- 在赋值给变量之前,必须声明变量。方法中声明的变量在使用之前必须被赋值。
-
2.6 赋值语句和赋值表达式
-
在Java中,将等号(=)作为赋值操作符。赋值语句的语法如下:
variable=expression;//(变量=表达式)
-
可以在表达式中使用变量。变量还可以同时出现在赋值操作符=的两边。
x = x + 1;
-
在赋值语句中,左边变量的数据类型必须与右边变量的数据类型兼容。例如,int x=1.0是错误的,因为1.0是double类型的,这样的数据是不能直接赋值给int类型的变量的。
-
-
2.7 命名变量
-
命名变量是一个代表不变值的标识符。
-
Java中常量也称为final修饰的变量。下面是生命常量的语法:
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 从键盘读取数值
Scanner对象的方法 方法 描述 nextByte() 读取一个byte类型的整数 nextShort() 读取一个short类型的整数 nextInt() 读取一个int类型的整数 nextLong() 读取一个long类型的整数 nextFloat() 读取一个float类型的数 nextDouble() 读取一个double类型的数 - 2.9.3 数值操作符
-
当除法的操作数都是整数时,除法的结果就是整数,小数部分被舍去。为了实现浮点数的除法,其中一个操作数必须是浮点数。
-
操作符%通常用在正整数上,实际上他也可以用于负整数和浮点值。只有当被除数是负数时,余数才是负的。
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); } }
结果显示:
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.9.1 数值类型
-
2.10 数值型字面值
字面值是程序中直接出现的常量值。例如,下面的语句中34和0.305都是字面值。int numberOfYears = 34; double weight = 0.305;
- 2.10.1 整型字面值
-
默认情况下,整型字面值是一个十进制整数。要表示一个二进制整数字面值,在数字面前使用0b或者0B(零B);要表示一个八进制整数字面值,在数字前使用0(零);而要表示一个十六进制整数字面值,在数字前使用0x或者0X(零X)。例如:
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允许在一个数值型字面值的两个数字间使用下划线。例如,下面的字面值是正确的:
long ssn = 232_45_4519; long creditCardNumber = 2324_4545_4519_3415L;
然而,45_和_45是不正确的,下划线必须在两个数字之间的。
-
- 2.10.2 浮点型字面值
- 2.10.3 科学计数法
- 浮点型字面值也可以用a x 10^b形式的科学计数法表示。
- 2.10.1 整型字面值
-
2.11 表达式求值以及操作符优先级
- 操作符的优先级规则用于确定计算的次序:首先计算乘法、除法和求余计算。如果表达式包含若干个乘法、除法和求余操作符,可按照从左到右的顺序执行。最后执行加法和减法运算。如果表达式中包含若干个加法和减法操作符,则按照从左到右的顺序执行。
-
2.12 示例学习:显示当前时间
-
可以通过调用System.currentTimeMillis()返回当前时间。
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 增强赋值操作符
- 操作符+ 、-、*、/、%可以结合赋值操作符形成增强操作符。
简捷赋值操作符 | 操作符 |名称 |示例|等价于| |--|--|--|--| | += | 加法赋值操作符 | 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将自动扩展为一个类型,但是缩小类型必须显示完成。
-
使用类型转换时必须小心,丢失的信息也许会导致不精确的结果。
-
类型转换不改变被转换的变量。
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的类型。
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、
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); } }