基本数据与计算
2.1 关键字--是一些被JAVA语言赋予了特殊含义的单词,不能随意使用
特点:在vscode中,关键字都是小写的
class--表示的是一个类
public--表示的是函数的权限
static--表示的是函数的类型
void--表示的是函数的返回值
string system--严格来说不是关键字,是JAVA自带类的名称,不能随意的使用
2.2 标识符--程序员在写代码的过程中自定义的一些名称(eg:变量名,类名,函数名,接口名....)
主函数main其实也是标识符,只不过被写死了
1.标识符的组成规则:
- 有字母,数字,下划线,美元符号组成
- 数字不能开头
- 严格区分大小写
- 可以为任意长度
- 不要使用关键字和JAVA中自带类的名称
为了提高标识符的阅读性,尽量起有意义的名字,一般写英文
2.标识符的组成规范:
- 小驼峰式命名法(如果一个标识符是由多个单词组成的一个词,那么除了第一个单词首字母小写外,其他首字母大写)主要用于变量名和函数名 eg:myName yourBoy
- 大驼峰式命名法(如果一个标识符有多个单词组成,那么所有单词的首字母均大写)eg:MyName YourBoy
- 全大写命名法(若果一个标识符是由多个单词组成,那么每个单词都要大写用下划线连接)eg:MAX_VALUE DEFAULT_SIZE
2.3常量与进制
常量:本身是数据,数据本身也不能被改变 ----就是在程序中直接出现的数据,同时称之为自变量
常见的常量:
- 整数(eg:14)
二进制(是一种计数方式 0b开头),八进制(0-7 8个数 0开头),十进制(代码中默认十进制),十六进制(0x开头)
二进制转八进制:10010101 -- 三个二进制位表示一个八进制位
八进制 0225--八进制转十进制 5*8^0+2*8^1+2*8^2=149
二进制转十六进制 四个二进制位表示一个十六进制位
二进制转六进制:先将二进制转化成十进制,用十进制数除6 余数从下往上写
负数的二进制:先写出正数的二进制,然后取反加1
- 小数(浮点数)
一般小数(3.14)
科学计数小数(3.89e3)
- 字符串(有一个或多个数字,字母,符号被双引号包含的数据 eg:"12222","") 是我们最常用的一种常量类型
- 字符(由一个数字或字母或符号被单引号包含的数据 eg:'1' )
- 布尔(只有两个值 true 和 false true和false其实是关键字的一种 表示确切的某个值)
- 空(null null其实也是一个关键字)
class Test01{ public static void main(String[] args){ System.out.println(0b1001); //打印二进制 结果十进制 System.out.println(012); //打印八进制 结果十进制 System.out.println(0xA9); //打印十六进制 结果十进制 System.out.println(3.14); System.out.println(3.89e-3); System.out.println('2'); //两个字符 System.out.println('我'); System.out.println("12asdgjhgasd"); System.out.println(""); //空串 System.out.println(' '); System.out.println(true); System.out.println(false); //空集 φ 真的就是啥也没有 } }
字节是计算机当中最小的计数单元 1kb=1024b 1mb=1024kb
2.4 变量与数据类型
1.变量:意义:本身是可以改变的数据
本质:变量主要是用于存储一些计算中存储的临时数据,本质就是在内存当中某一个进程的一个临时存储区域
每一个变量空间在创建时候会被随机的分配地址(真实的物理地址)
变量空间中的数据在变化的过程中必须保持是可兼容的(至少是同一类型)
如果直接在代码中用变量的物理地址访问空间中的数据的话,有可能访问不到;为了避免地址的不确定性,才引用了变量 由变量名-地址表来保证变量名和变量之间的关系(底层实现)
上述变量空间的地址其实就是c语言当中的指针 变量地址本身就是指针
常量数据一定在变量空间吗?--不是所有的常量都在常量池当中,而变量空间存的是常量在常量池中的地址,变量空间里面永远存的都是地址
小精度转大精度是自动转;
大精度转小精度需要强转,精度会损失。
变量地址本身就是指针
2.数据类型:
1.目的:为了限制当前变量中存储的数据(变量中的地址必须是可兼容的);
为了限制当前变量空间的大小
2.分类:
- 基本数据类型
(1)整数:byte型(1字节 2^8种数据可用 128正+128负 (-128~-1 和0~127)(-128~127)),short型(2字节 2^16 -2^15~2^15-1),int型(4字节 2^32),long型(8字节 2^64) 正的到负的先取反后加1 负到正减1取反 整数常量默认为int类型 强转:大转小对于整数之间进行加法运算时得到的值是int型, 之所以分为四类:原因是主要看数字的取值范围
整型溢出:最大数+1才溢出; byte->short->int->long->float->double;在整数/浮点数进行运算时,谁最大就是谁
(2)浮点数:float(4字节),double(8字节) 【浮点型常量默认double类型】
(3)字符 :char(2字节 0~65535指字符的编号)在计算机当中,如何存储字符的?--字符是一些符号,字母,数字,标点符号 它主要是以图像符号的方式存储或者表示信息的
char c1=97//将字符的编号给字符变量那么在打印这个字符变量时,去码表中找到编号相对应的字符,然后再去打印
char c2='A'//无论如何赋值,一旦打印的是字符变量,结果一定是字符
-
字符变量在参与运算时,是以编号身份参加 eg:char c3='a';
System.out.println(c3+1);//输出为98
-
如何判断一个字符是小写字母?--97~97+25(小写的编码区间) 65~97 大写
-
(4)布尔:true/false (在java中并没有给boolean一个明确的大小,主要与底层虚拟机相关)
如果Boolean是一个变量的话,大小是1个字节;如果是一个数组的话,每个空间是4个字节
- 引用数据类型:字符串(String也不存在具体的大小,它是根据字符串的内容决定;目前而言,可以向用)
2.5 运算符
1.算数运算符(+:【如果+两边都是数字的话则代表的是数学上的+;如果+两边只有一个字符串的话,代表的是连接】(从左向右),-,*,/【如果两边都是整数,结果也是整数;如果两边至少存在一个小数,结果就是小数 】,%(取余)【相当于除法运算,但是得到的结果是余数】,++(自加)【前++ eg:++i【i本身直接+1再参与运算】;后++ eg:i++【先参与运算,再++‘’】】,--(自减))
i++:计算步骤
1.先开辟一个临时存储区
2.将i的值复制到存储区
3.i自身+1
4.临时存储区的值等待被调用(参与运算,输出,赋值)如果临时存储区的值被调用,则输出的为临时存储区的值;如果没有被调用,则输出的为+1后的值
对下面这个代码而言,首先先给i赋值为3;将3放进临时存储区,此时i本身变为4,输出i的值是4--(因为临时存储区的i值本身没有进行任何运算,因此输出的值应该是4)----其实也就相当于当打印的数为i时则输出的数为i+1;输出的数为i++是则输出的临时存储区的数
class Test05{ public static void main(String[] args){ int i=3; i++; System.out.println(i); //4 System.out.println(i++);//4 int j=i++; System.out.println(j); //5 System.out.println(i); //6 i=i++; System.out.println(i); //6 i=i++; System.out.println(i); //6 } }
2.赋值运算符(+=,-=,*=,/=,%=,=)
3.比较运算符(<,><=,>=,!=,==)这些运算符产生的结果是Boolean型的
==不管是在基本数据类型还是面向对象中比的永远都是两个变量(常量)当中所存储的数据的地址
这个地址主要分为:常量在常量池中的地址;对象在堆内存中的地址。
4.逻辑运算符(与【同真则真,有假则假】,或【有真则真,同假则假】,非【非真就是假】,异或【相同为假,不同为真】)运算结果是boolean类型
与:分为&和&& &:有假则假 &&:若左边为假,则不运行右边,若不为假,则看右边
或:分为|和|| ||:一旦左边为真,则不运行右边,若为假则看右边
5.位运算符(二进制间的运算;&(同真则真),|,^(异或,不同为真,相同为假),>>,<<)
>>相当于在右边增加位 eg:01110111 >>2位----变成01 11011100
<<相当于在左边增加位 eg:01110111<<2位----变成00011101 11
6.三目运算符 变量==布尔表达式?值1:值二; 如果布尔表达式结果为true 则将值1赋予变量 在一定程度上简化了if语句功能,但不能取代if语句
如果,boolean表达式的 结果是true,则将值1赋给变量
如果结果为flase,则将值2赋给变量
eg:int a=5;
int b=6;
int min=a>b?b:a;
如果a>b,为true则min=b;若为flase则min=a.
题目:
1.
/*
Scanner是一个Java自带的类,主要负责数据输入的问题
*/
import java.util.*;
//从java.util包中导入Scanner;
public class demo1{
public static void main(String[] args){
System.out.print("请输入摄氏温度:");
Scanner S=new Scanner(System.in);// new Scanner(System.in)表明新创建了Scanner类的对象并且将它的引用值赋值给S
double x=S.nextDouble();//调用一个nextDouble()方法来读取一个double值;
System.out.println("该华氏温度为"+((9.0/5)*x+32));
}
}
2.
import java.util.*;
class demo2{
public static void main(String[] args){
System.out.print("请分别输入radius和length:");
Scanner S=new Scanner(System.in);
double radius=S.nextDouble();
double length=S.nextDouble();
double area=radius*radius*3.14;
double volume=area*length;
System.out.println("这个圆柱的体积是:"+volume);
}
}
.3.
import java.util.*;
public class demo3{
public static void main(String[] args){
System.out.print("输入一个位于0-1000之间的数");
Scanner S=new Scanner(System.in);
int num=S.nextInt();
int a=num%10;//得到各位
num/=10;
int b=num%10;//得到十位
num/=10;
int c=num%10;//得到百位
int sum=a+b+c;
System.out.println("该数的各位数字之和为:"+sum);
}
}
4.
import java.util.*;
class demo4{
public static void main(String[] args){
System.out.print("请输入时区偏移量:");
int offset=S.nextInt();
Scanner S=new Scanner(System.in);
//总毫秒数
long totalMillis=System.currentTimeMillis();//调用currentTimeMillis()方法获取
//总秒数
long totalSeconds=totalMillis/1000;
//当前秒数
long currentSecond=totalSeconds%60;
//总分钟数
long totalMinutes=totalSeconds/60;
//当前分钟数
long currentMinute=totalMinutes%60;
//总小时数
long totalHours=totalMinutes/60;
//当前小时数
long currentHours=totalHours%24;
System.out.println("current time is"+currentHour+":"+currentMinute+":"+currentSecond);
}
}
5.
class demo5{
public static void main(String[] args){
double money=100;
double rate=0.05;
//第一个月的本息和
double sum=money*(1+rate/12);
//第二个月的本息和
sum=(sum+money)*(1+rate/12);
//3
sum=(sum+money)*(1+rate/12);
//4
sum=(sum+money)*(1+rate/12);
//5
sum=(sum+money)*(1+rate/12);
//6
sum=(sum+money)*(1+rate/12);
System.out.println("6个月后的金额"+sum);
}
}
6.
import java.util.*;
class demo6{
public static void main(String[] args){
Scanner s=new Scanner(System.in);
System.out.print("请输入第一个坐标:");
double x1=s.nextDouble();
double y1=s.nextDouble();
System.out.print("请输入第二个坐标:");
double x2=s.nextDouble();
double y2=s.nextDouble();
double z=Math.pow(Math.pow((x2-x1),2)+Math.pow((y2-y1),2),0.5);
System.out.println("两点间的距离为:"+z);
}
}
7.
import java.util.*;
class demo7{
public static void main(String[] args){
Scanner s=new Scanner(System.in);
System.out.print("输入三个点的坐标:");
double x1=s.nextDouble();
double y1=s.nextDouble();
double x2=s.nextDouble();
double y2=s.nextDouble();
double x3=s.nextDouble();
double y3=s.nextDouble();
double z1=Math.pow(Math.pow((x2-x1),2)+Math.pow((y2-y1),2),0.5);
double z2=Math.pow(Math.pow((x3-x2),2)+Math.pow((y3-y2),2),0.5);
double z3=Math.pow(Math.pow((x3-x1),2)+Math.pow((y3-y1),2),0.5);
double n=(z1+z2+z3)/2;
double m=Math.pow(n*(n - z1)*(n - z2)*(n - z3),3);
System.out.printf("area=%.2f\n",m);
}
}