2.1关键字和标识符
- 关键字:Java关键字是电脑语言里事先定义的,有特别意义的标识符,有时又叫保留字,还有特别意义的变量。Java的关键字对Java的编译器有特殊的意义,他们用来表示一种数据类型,或者表示程序的结构等,关键字不能用作变量名、方法名、类名、包名和参数。
- 标识符:Java标识符由数字,汉字,字母和下划线(_),美元符号($)或人民币符号(¥)组成。在Java中是区分大小写的,而且还要求首位不能是数字。最重要的是,Java关键字不能当作Java标识符。
2.2注释和常量
- 注释:Java语言的注释一共有三种类型,分别为单行注释,多行注释和文档注释。
- 常量:简单的说就是程序执行时保持不变的量。
- 进制:进位制/位置计数法是一种记数方式,故亦称进位记数法/位值计数法,可以用有限的数字符号代表所有的数值。可使用数字符号的数目称为基数(en:radix)或底数,基数为n,即可称n进位制,简称n进制。
2.3变量和数据类型
- 变量:变量可以保存程序运行时用户输入的数据(如使用InputBox函数在屏幕上显示一个对话框,然后把用户键入的文本保存到变量中)、特定运算的结果以及要在窗体上显示的一段数据等。简而言之,变量是用于跟踪几乎所有类型信息的简单工具。
- 数据类型:
2.4输入和输出
- Scanner对象:用户从键盘输入
- System.out.println():将用户需要输出的信息输出。
2.5数据类型转换
- 数据类型转换
1 自动类型转换:Java所有的数值型变量可以相互转换,如果系统支持把某种类型的值直接赋给另一种基本类型的变量,则这种方式被称为自动转换类型。
2 强制类型转换:如果需要把某种类型的值直接转化另一种基本类型的变量,则必须进行强制转换,强制转换的语法格式是:(targetType)value.
3 表达式类型的自动提升:当一个算术表达式中包含多个基本数据类型时,整个算术表达式的数据类型将自动提升。Java定义了如下的提升规则。
(1)所有的byte类型、short类型和char类型将被提升到int类型。
(2)整个算术表达式的数据类型自动提升与表达式中最高等级操作数同样的类型。操作数的等级排列如下图所示,位于箭头右边的类型的等级高于位于箭头左边的类型。
低————————————————>高
2.6算术运算符
- 加+:加法运算符
- 减-:减法运算符
- 乘*:乘法运算符
- 除/:除法运算符
- 取余%:求余运算符,求余运算的结果不一定总是整数,它的计算结果是使用第一个操作数除以第二个操作数,得到一个整除的结果后剩下的值就是余数。
- 自加++:自加运算符有两个要点:①自加是单目运算符,只能操作一个操作数;②自加运算符只能操作单个数值型(整型、浮点型)的变量,不能操作常量或表达式。
- 自减–:也是单目运算符,用法与++基本相似,只是将操作数的值减1.
- 示例:显示当前时间
public class Test2_1 {
//显示当前时间
public static void main(String[] args) {
//获取从1970 1-1 00:00:00 到至今的毫秒数
long millis=System.currentTimeMillis();
long seconds=millis/1000;
long minutes=seconds/60;
long hours=minutes/60;
//如何从经过的毫秒值里获取当前小时 总小时%24
System.out.print(hours%24+8+":");//东八区+8
//...当前分钟
System.out.print(minutes%60+":");
//...当前秒
System.out.println(seconds%60);
}
}
- 示例:挣钱兑零
import java.util.Scanner;
//整钱兑零
public class Test2_2 {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
//获取用户输入的钱数 double
System.out.println("请输入总钱数:");
//美分数
int money=(int) (scanner.nextDouble()*100);
//获取美元
int dollar=money/100;//1156
money=money%100;//剩余的美分数 56
//获取2角5分
int quarter=money/25;//2
money=money%25;//6
//获取1角
int dime=money/10;//0
money=money%10;//6
//获取5分
int nickel=money/5;//1
int penny=money%5;//1
System.out.println("dollar="+dollar);
System.out.println("quarter="+quarter);
System.out.println("dime="+dime);
System.out.println("nickel="+nickel);
System.out.println("penny="+penny);
}
}
2.7赋值运算符
- 加等 +=:x+=2 x=x+2
- 减等 -=:x-=2 x=x-2
- 乘等 =:x=2 x=x*2
- 除等 /=:x/=2 x=x/2
- 模等 %=:x%=2 x=x%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);
}
}
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);
}
}
第二种:用户只需输入存取金额和月份即可。
import java.util.Scanner;
public class lian2_7 {
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
//1.提示用户输入每月存钱金额和需要存的月数
System.out.print("Enter amount and month: ");
double money=scanner.nextDouble();
int month=scanner.nextInt();
//2.计算1块钱的月利息
double rate=5.0/12/100;
//3.计算本金和利息总额
money=money*(1+rate);
for(int i=1;i<=month;i++){
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);
}
}