第二章 基本程序设计
2.1 关键字和标识符
-
关键字 :KeyWord 在高级编程语言里 被赋予特殊含义的单词。
-
标识符:自定义的名称 变量 函数 类名 包名。
起名规则:
1.标识符是由字母 、数字 、下划线 ( - ) 和美元符号 ( $ ) 构成的字符序列 。
2.标识符不能以数字开头 。
3.严格区分大小写。
4.必须是一个词。
5.标识符可以为任意长度 。起名规范:
1.变量名/函数名 小驼峰式书写规范 age myAge doSomething (除第一个单词之外 其他单词首字母大写)
2.类名/接口名 大驼峰是书写 StudentName LoveYou (所有单词首字母大写)
3.常量 所有字母大写 单词之间 加_ MAX_VALUE MY_AGE
4.包名 所有字母小写 单词之间用. com.baidu.www
2.2 常量和变量
-
常量:是指在程序中直接出现的数据
数字
布尔值(true false)
字符:由一个符号被单引号’'所包含的数据(‘a’)
字符串:由若干个字符被双引号""包括的数据(“abc” ) -
变量: 用于表示在程序中可能被改变的值 。
变量就是一个内存中的临时存储空间
变量的分配是由计算机随机分配的,物理地址不确定
为了方便找到变量 所以对该变量空间取名 变量名
变量空间里面只能存储同一类型的数据
变量的定义:
数据类型 变量名=常量;
int count = 1;
2.3 基本数据类型
整型 byte bit 范围
byte 1字节 8位 -2^7~2^7-1 -128~127
short 2字节 16位 -2^15~2^15-1 -32768~32767
int(常用) 4字节 32位 -2^31~2^31-1
long 8字节 64位 -2^63~2^63-1
浮点型 小数
float 4字节
double(常用) 8字节
字符型
char 2字节 16位 1~65536
布尔型
boolean 不确定(争论) true false
2.4 输入和输出
- 输入:scanner类获取用户的输入。
创建 Scanner 对象的基本语法:Scanner s = new Scanner(System.in);
- 输出:
System.out.println();
2.5 数据类型的转换
- 自动类型转换:Java所有的数值型变量可以相互转换,如果系统支持把某种类型的值直接赋给另一种基本类型的变量,则这种方式被称为自动转换类型。
- 强制类型转换:如果需要把某种类型的值直接转化另一种基本类型的变量,则必须进行强制转换,强制转换的语法格式是:(targetType)value.
- 表达式类型的自动提升:当一个算术表达式中包含多个基本数据类型时,整个算术表达式的数据类型将自动提升。Java定义了如下的提升规则。
(1)所有的byte类型、short类型和char类型将被提升到int类型。
(2)整个算术表达式的数据类型自动提升与表达式中最高等级操作数同样的类型。操作数的等级排列如下图所示,位于箭头右边的类型的等级高于位于箭头左边的
2.6 算术运算符
- 加 +
- 减 -
- 乘 *
- 除 /
- 取余 %
- 自加 ++
- 自减 –
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 使用同样的除法操作符来执行整数和浮点数的除法。 当两个操作数是整数时, 操作符执行一个整数除法, 操作的结果是整数, 小数部分被截去。 要强制两个整数执行一个浮点数除法时, 将其中一个整数转换为浮点数值。
- 冗余的输入对象:编程新手经常为每个输入编写代码创建多个输入对象。 代码没有出错, 但是效率低。 它创建了两个不必要的输人对象, 可能会导致一些不易发现的错误。
本章小结
- 标识符是程序中用于命名诸如变量 、 常量、 方法 、 类、 包之类元素的名称。
- 标识符是由字母、 数字、 下划线( _ )和美元符号( $ ) 构成的字符序列。 标识符必须以字母或下
划线( _ ) 开头, 不能以数字开头.标识符不能是保留字。 标识符可以为任意长度。 - 变量用于存储程序中的数据。 声明变量就是告诉编译器变量可以存储何种数据类型。
- 有两种类型的 import 语句: 明确导入和通配符导入。 明确导人是在 import 语句中指定导入单个
类;通配符导入将包中所有的类导入。 - 在 Java 中, 等号( = ) 被用作賦值操作符。
- 方法中声明的变量必须在使用前被賦值 。
- 命名常量(或简称为常量) 表示从不改变的永久数据。
- 用关键字 final 声明命名常量。
- Java 提供四种整数类型( byte、 short、 int、 long) 表示四种不同长度范围的整数。
- Java 提供两种浮点类哲(float、 double) 表示两种不同精度的浮点数。
- Java 提供操作符完成数值运算: 加号(+)、 减号(- )、 乘号( * )、 除号(/) 和求余符号(%)。
- 整数运算(/) 得到的结果是一个整数。
- Java 表达式中的数值操作符和算术表达式中的使用方法是完全一致的。
- Java 提供扩展陚值操作符 :+= (加法陚值 )、 -=(减法陚值)、 *=(乘法陚值)、 /=(除法陚值) 以及 %=(求余陚值)。
- 自增操作符( ++) 和自减操作符(–) 分别对变量加1或减1。
- 当计算的表达式中有不同类型的值, Java 会自动地将操作数转换为恰当的类型。
- 可以使用(type)value 这样的表示法显式地将数值从一个类型转换到另一个类型。
- 将一个较小范围类型的变量转換为较大范围类型的变量称为拓宽类型。
- 将一个较大范围类型的变貴转換为较小范围类型的变量称为缩窄类型。
- 拓宽类型不需要显式转换, 可以自动完成。 缩窄类型必须显式完成。
- 在计算机科学中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);
}
}
import 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);
}
}
2.8
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);
}
}