基础程序设计
2.1标识符
标识符是为了表示程序中诸如类、方法和变量的元素而采用的命名。
标识符的命名必须遵循以下规则:
(1)标识符是由字母、数字、下划线(_)和美元符号($)构成的字符序列。
(2)标识符必须以字母、下划线和美元符号开头,不能以数字开头。
(3)标识符不能是保留字。
(4)标识符不能是true、false或null。
(5)标识符可以为任意长度。
提示:在Java中是严格区分大小写的。
2.2 变量
变量是用于表示在程序中可能被改变的值。它们被称为变量是因为它们的值可以改变。
提示:在赋值给变量之前,必须声明变量。方法中声明变量在使用之前必须被赋值。在任何时候,都要尽可能一步完成变量的声明和赋初值。这样使得程序易读,同时避免程序设计错误。
每个变量都有使用范围。变量的使用范围是指变量可以被引用到的程序的部分。
2.3赋值语句和赋值表达式
要点提示:赋值语句将一个值指定给一个变量。在Java中赋值语句可以作为一个表达式。
声明变量以后,可以使用赋值语句给它赋一个值。在Java中,将等号(=)作为赋值操作符。
在Java中,赋值语句本质上就是计算出一个值并将它赋值给操作符左边变量的一个表达式。由于这个原因,赋值语句常常被称为赋值表达式。
注意:在赋值语句中,左边变量的数据类型必须和右边值的数据类型相互兼容。
2.4命名常量
要点提示:命名常量是一个代表不变值的标识符。
一个变量的值在程序执行过程中可能会发生变化,但是命名常量或简称为常量,则表示从不会改变的永久数据。
使用常量的好处:
(1)不必重复输入同一个值。
(2)如果必须修改常量值,只需在源代码中的一个地方做改动。
(3)给常量附一个描述性名字会提高程序的易读性。
2.5命名习惯
要点提示:严格遵循Java的命名习惯可以让程序易于理解,以避免错误。
应该确保程序中为变量、常量、类和方法所选择描述性名字是直观易懂的。
(1)使用小写字母明明变量和方法。
(2)类名中的每个单词的首字母大写。
(3)大写常量中的所有字母,两个单词兼用下划线链接。
警告:对类命名时不要选择Java库中已经使用的名称。
2.6数值数据类型和操作
要点提示:Java针对整数和浮点数有六种数值类型,以及+、—、*、/、和%等操作。
数字类型
每个数值类型都有它的取值范围。编译器会根据每个变量或常量的数据类型为其分配存储空间。在Java中,为数值、字符值和布尔值数据提供了八种基本数据类型。
四种类型的整数:byte、short、int和long。应该为变量选择最合适的数据类型。
两种类型的浮点数:float、double。
2.7自增和自减操作符
自增(++)和自减(–)操作符是对变量进行加1和减1的操作。
一些常用的方法
System.currentTimeMillis();返回当前时间。
Math.pow(a,b)计算a^b。
2.8 算术运算符
加 +
减 -
乘 *
除 /
取余 %
自加 ++
自减 –
2.7 赋值运算符
加等 +=
例如n+=2,意思为n=n+2
减等 -=
例如n-=2,意思为n=n-2
乘等 =
例如n=2,意思为n=n*2
除等 /=
例如n/=2,意思为n=n/2
模等 %=
例如n%=2,意思为n=n%2
2.8 位运算符
位与 &:当两位同时为1时才返回1.
位或 |:只要有一位为1就可返回1.
位异或 ^:当两位相同时返回0,不同时返回1.
位左移 <<:左移运算符。
位右移 >>:右移运算符。
2.9常见错误与陷阱
- 未声明、未初始化的变量和未使用的变量:变量必须在使用之前声明为一个类型并且賦值。
- 整数溢出:数字以有限的位数存储。 当一个变量被陚予一个过大(以存储大小而言) 的值, 以至无法存储该值, 这称为溢出。
取整错误:一个取整错误, 也称为凑整错误, 是在计算得到的数字的近似值和确切的算术值之间的不同。 例如, 如果保留三位小数位数, 1/3 近似等于 0.333, 如果保留 7 位, 近似值是0.333 333 3。 因为一个变量保存的位数是有限的, 因此取整错误是无法避免的。涉及浮点数的计算都是近似的, 因为这些数没有以准确的精度来存储。 - 超出预期的整数除法:Java 使用同样的除法操作符来执行整数和浮点数的除法。 当两个操作数是整数时, 操作符执行一个整数除法, 操作的结果是整数, 小数部分被截去。 要强制两个整数执行一个浮点数除法时, 将其中一个整数转换为浮点数值。
- 冗余的输入对象:编程新手经常为每个输入编写代码创建多个输入对象。 代码没有出错, 但是效率低。 它创建了两个不必要的输人对象, 可能会导致一些不易发现的错误。
本章小结
1.标识符是程序中用于命名诸如变量 、 常量、 方法 、 类、 包之类元素的名称。
2.标识符是由字母、 数字、 下划线( _)和美元符号( $ ) 构成的字符序列。 标识符必须以字母或下划线( _ ) 开头, 不能以数字开头.标识符不能是保留字。 标识符可以为任意长度。
3.变量用于存储程序中的数据。 声明变量就是告诉编译器变量可以存储何种数据类型。
4.有两种类型的 import 语句: 明确导入和通配符导入。 明确导人是在 import 语句中指定导入单个类;通配符导入将包中所有的类导入。
5.在 Java 中, 等号( = ) 被用作賦值操作符。
6.方法中声明的变量必须在使用前被賦值 。
7.命名常量(或简称为常量) 表示从不改变的永久数据。
8.用关键字 final 声明命名常量。
9.Java 提供四种整数类型( byte、 short、 int、 long) 表示四种不同长度范围的整数。
10.Java 提供两种浮点类哲(float、 double) 表示两种不同精度的浮点数。
11.Java 提供操作符完成数值运算: 加号(+)、 减号(- )、 乘号( * )、 除号(/) 和求余符号(%)。
12.整数运算(/) 得到的结果是一个整数。
13.Java 表达式中的数值操作符和算术表达式中的使用方法是完全一致的。
14.Java 提供扩展陚值操作符 :+= (加法陚值 )、 -=(减法陚值)、 *=(乘法陚值)、 /=(除法陚值) 以及 %=(求余陚值)。
15.自增操作符( ++) 和自减操作符(–) 分别对变量加1或减1。
16.当计算的表达式中有不同类型的值, Java 会自动地将操作数转换为恰当的类型。
17.可以使用(type)value 这样的表示法显式地将数值从一个类型转换到另一个类型。
18.将一个较小范围类型的变量转換为较大范围类型的变量称为拓宽类型。
19.将一个较大范围类型的变貴转換为较小范围类型的变量称为缩窄类型。
20.拓宽类型不需要显式转换, 可以自动完成。 缩窄类型必须显式完成。
21.在计算机科学中1970年1月1日午夜零点称为 UNIX 时间戮。
编程练习
import java.util.Scanner;
public class Demo2_1 {//IPO Input Process Output
public static void main(String[] args) {
//1.获取用户输入的摄氏温度
Scanner scanner=new Scanner(System.in);
//提示信息
System.out.print("Enter a degree in Celsius:");
double celsius=scanner.nextDouble();
//2.将摄氏温度转换为华氏温度
double fahrenheit=(9.0/5)*celsius+32;
//3.将华氏温度输出
System.out.println(celsius+" Celsius is "+fahrenheit+" Fahrenheit");
}
}
import java.util.Scanner;
public class Demo2_2 {
//全局常量
public static final double PI=3.1415926;
public static void main(String[] args) {
//1.获取用户输入的半径和高
Scanner scanner=new Scanner(System.in);
//提示
System.out.print("Enter the radius and length of a cylinder:");
double radius=scanner.nextDouble();
double length=scanner.nextDouble();
//2.先计算底面积 后计算体积
double area=radius*radius*PI;
double volume=area*length;
//3.将体积输出
System.out.println("The area is "+area);
System.out.println("The volume is "+volume);
}
}
2.3
import java.util.Scanner;
public class Demo2_3 {
public static void main(String[] args) {
//1.获取用户输入的数字
Scanner scanner=new Scanner(System.in);
System.out.print("Enter a number betweem 0 and 1000:");
int number=scanner.nextInt();
//2.将数字进行分解
/*
987%10=7->a
987/10=98
98%10=8->b
98/10=9
9%10=9->c
a+b+c
*/
int a=number%10;
number/=10;
int b=number%10;
number/=10;
int c=number%10;
//3.将三个数字相加并输出
int add=a+b+c;
System.out.println("The sum of the digit is "+add);
}
}
import java.util.Scanner;
public class Demo2_4 {
public static void main(String[] args) {
//1.获取用户输入的分钟数
Scanner scanner=new Scanner(System.in);
System.out.print("Enter the number of minutes:");
int mintues=scanner.nextInt();
//2.将从分钟数中转化天数->年数
int days=mintues/60/24;
int years=days/365;
days=days%365;
//3.输出
System.out.println(mintues+" mintues is approximately "+years+" years and "+days+" days");
}
}
import java.util.Scanner;
public class Demo2_5 {
public static void main(String[] args) {
//获取从1970 1-1 00:00:00 到至今的毫秒数
Scanner scanner=new Scanner(System.in);
//获取偏移量
System.out.print("Enter the time zone offset to GMT:");
int offset=scanner.nextInt();
long millis=System.currentTimeMillis();
long seconds=millis/1000;
long minutes=seconds/60;
long hours=minutes/60;
//如何从经过的毫秒值里获取当前小时 总小时%24
System.out.print(hours%24+offset+":");//东八区+8
//...当前分钟
System.out.print(minutes%60+":");
//...当前秒
System.out.println(seconds%60);
}
}
i
mport java.util.Scanner;
public class Demo2_6 {
public static void main(String[] args) {
//1.输入水的重量 初始温度 最终温度
Scanner scanner=new Scanner(System.in);
System.out.print("Enter the amount of water in kilograms:");
double weight=scanner.nextDouble();
System.out.print("Enter the inital temperature:");
double initalTemp=scanner.nextDouble();
System.out.print("Enter the final temperature:");
double finalTemp=scanner.nextDouble();
//2.根据公式 计算能量
double energy=weight*(finalTemp-initalTemp)*4184;
//3.输出能量值
System.out.println("The energy needed is "+energy);
}
}
public class Demo2_7 {
public static void main(String[] args) {
double money=100;//本金
double rate=5.0/100/12;//月利率
//第一个月
money=money*(1+rate);
money=(money+100)*(1+rate);
money=(money+100)*(1+rate);
money=(money+100)*(1+rate);
money=(money+100)*(1+rate);
money=(money+100)*(1+rate);
System.out.println(money);
}
}
import java.util.Scanner;
public class Demo2_8 {
public static void main(String[] args) {
//1.输入两个坐标
Scanner scanner=new Scanner(System.in);
System.out.print("Enter x1 and y1:");
double x1=scanner.nextDouble();
double y1=scanner.nextDouble();
System.out.print("Enter x2 and y2:");
double x2=scanner.nextDouble();
double y2=scanner.nextDouble();
//2.计算两个坐标之间的距离
double deltX=x2-x1;
double deltY=y2-y1;
//Math.pow(2,3) 2^3
//Math.pow(4,0.5) Math.sqrt()
double distance=Math.sqrt(Math.pow(deltX, 2)+Math.pow(deltY, 2));
// double distance=Math.pow(Math.pow(deltX, 2)+Math.pow(deltY, 2),0.5);
//3.输出距离
System.out.println(distance);
}
}
import java.util.Scanner;
public class lain2_9 {
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
//1.提示用户输入六边形边长
System.out.print("Enter hexagonal edge length: ");
double length=scanner.nextDouble();
//2.通过题中提示的计算六边形面积公式计算
double area=3*Math.sqrt(3)/2*Math.pow(length, 2);
//3.将计算结果输出
System.out.println(area);
}
}
import java.util.Scanner;
public class lian2_10 {
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
//1.提示用户输入华氏温度和风速
System.out.println("Enter the temperature in Fahrenheit between -58F and 41F:");
double temperature=scanner.nextDouble();
System.out.println("Enter the wind speed (>=2) in mile per hour: ");
double speed=scanner.nextDouble();
//2.用计算公式计算t
double t=35.74+0.6215*temperature-35.75*Math.pow(speed, 0.16)+0.4275*temperature*Math.pow(speed, 0.16);
//3.输出寒冷程度
System.out.println("The wind chill index is "+t);
}
}
import java.util.Scanner;
public class lian2_11 {
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
//1.提示用户输入三角形三个点的坐标
System.out.println("Enter three point for a triangle:");
double x1=scanner.nextDouble();
double y1=scanner.nextDouble();
double x2=scanner.nextDouble();
double y2=scanner.nextDouble();
double x3=scanner.nextDouble();
double y3=scanner.nextDouble();
//2.根据坐标计算边长S1 S2 S3
double L1=Math.sqrt(Math.pow((x1-x2),2)+Math.pow((y1-y2),2));
double L2=Math.sqrt(Math.pow((x1-x3),2)+Math.pow((y1-y3),2));
double L3=Math.sqrt(Math.pow((x2-x3),2)+Math.pow((y2-y3),2));
//3.根据公式计算面积
double s=(L1+L2+L3)/2;
double area=Math.sqrt(s*(s-L1)*(s-L2)*(s-L3));
System.out.println("The area of the triangle is "+area);
}
}