复习javase
数据类型
jdk jre jvm
配置环境变量
标识符
关键字
常量+变量
运算符: 算术运算符 比较运算符 赋值运算符 位运算符 逻辑运算符 三元运算符
数据类型:
数据类型转换:java是强类型语言:值的类型必须和变量类型一致
1: 自动类型转换情况1: 高精度变量=低精度数据;
eg: float f=1;
左边float类型的变量f 右边int类型的整数1
编译器会把 4个字节int类型的1 自动转换为4个字节float类型的1.0f 然后赋值
2: 自动类型转换情况2: char/byte/short类型的变量=int常量值;
eg: byte b1=1;
编译器判断1 处在byte范围内,把4个字节int类型的自动转换为1个字节byte类型的1
然后赋值
eg: short s1= 50000; (short取值:-32768到32767)
编译器判断50000不在short范围内,直接报错
3: 强制类型转换: 低精度变量=(低精度变量的类型)高精度数据;
eg: short s2=(short)50000;
int i1=(int)1.1;
编译器强制把8个字节double类型的1.1 转换为4个字节int类型的1 然后赋值
//数据类型精度表:(boolean)byte short (char)int long float double
/*
boolean、byte 1个字节 8位;
short、char 2个字节 16位;
int float 4个字节 32位;
double、long 8个字节 64位
*/
//自动转化三类:
//自动转化类型1,高的精度=低的精度
long l = 1 ;
double d = ‘1‘;
//自动转化类型2,byte/short/char 变量 = int 常量值
byte b = 1 ;
//byte占1个字节,8位-127到127
//自动转化类型3,低的精度=(低精度)高的精度
short f = (short) 100000;
//这里输出为负数,因为超过了short的最大值
/*
思考
*/
byte b1 = (int)1.1;
//注意是常量值不是变量,变量必须自己强转
int i1=1;byte b2 = (byte) i1;
short s1 = 1;char c1 = (char) s1;
流程控制
学过的内容总结自己的话
计算机所有语言所有概念都是望文生义
流程控制:就是计算机执行程序的流程,一般为从上到下、从左到右。
1.选择结构
if-else
switch:只适用于穷举法,必须把所有可能列举出来
2.循环结构
while
do-while:至少执行一次
for
3: 循环结构
for
while
do while
4: 跳转
break
continue
- ifelse
//2.1 if-else
int a=1;
if(a>0){
System.out.println("a=" + a + "大于0!");
}
if(a>0) //如果执行的代码块只有一个语句 大括号可以省略---不规范
System.out.println("a=" + a + "大于0!");
System.out.println(111);
- switch
//2.2 switch
/*
* switch: 只适用于穷举法: 必须把所有可能的清空列举 不适用范围判断
* switch注意事项:
* 1 switch表达式的值的数据类型仅限于:int+String+enum
* 2 case后面的值不能重复
* 3 只有当所有的case都不正确时 才运行default 与其位置无关
* 4 break的作用是 结束switch结构
* */
//根据月份判断季节: 3 4 5春天 678 夏 9 10 11 秋季 12 1 2 冬季
int month=1;
switch(month){
default:
System.out.println("momnth="+month+"月是火星季!");
break;
case 1:
case 2:
case 12:
System.out.println("momnth="+month+"月是冬季!");
break;
case 3:
case 4:
case 5:
System.out.println("momnth="+month+"月是春季!");
break;
case 6:
case 7:
case 8:
System.out.println("momnth="+month+"月是夏季!");
break;
case 9:
case 10:
case 11:
System.out.println("momnth="+month+"月是秋季!");
break;
}
- while和dowhile的区别
//1 while和dowhile的区别
//while是先判断再执行
//dowhile是先执行再判断::dowhile至少执行一次
int a=-1;
while(a>=0){
System.out.println(a+">=0成立!while");
a--;//迭代语句:按指定的算法更改变量的值
}
a=-1;
do{
System.out.println(a+">=0成立!do---while");
a--;//迭代语句:按指定的算法更改变量的值
}while(a>=0);
- for
//1 for格式
/*
* for(初始化语句;循环条件;迭代语句){
* 循环体
* }
* */
for(int a=1;a<=5;a++){
//System.out.println("a="+a);
}
//2 省略
// for(;;){ //如果条件表达式省略 默认是true 死循环
// System.out.println("111");
// }
//3 执行流程
//初始化语句只执行一次:第一次循环前执行一次
//先执行初始化语句 -》
// 1:判断条件表达式是否成立 不成立结束循环
// 2:条件表达式成立 执行循环体
// 3:循环体执行完 执行迭代语句
// 迭代语句执行完 再次判断条件表达式是否成立 一直循环执行1 2 3步
// 直到1的条件表达式不成立 才结束循环
int i=1;
for(System.out.println("i="+i+"初始化语句!");i<=0; System.out.println("i="+i+"迭代语句!")){
//System.out.println("i="+i+"循环体!");
i++;
}
//4 变量作用范围
int a=1;//1 变量a在for循环外面定义的: 作用于整个for循环 并且在for循环结束后仍然可以访问到
for(int b=1;b<=5;){// 2 变量b在for循环的初始化语句中定义的: 作用于整个for循环 for循环结束后变量消失
int c=1; // 3 变量c在for循环的循环体中定义的:只作用于本次循环
//System.out.println("a="+a+",b="+b+",c="+c);
b++;a++;c++;
}
System.out.println("a="+a);
//案例1:获取1到100内个位数值为1 并且可以被3整除的所有数平均值
// 需要让一个数从值1跑到值2 使用循环
//定义变量记录和 和 个数
int sum1=0,geShu1=0;
for(int n=1;n<=100;n++){
//判断当前n的个位数值为1 并且可以被3整除
if(n%3==0){
//获取个位数
int geWeiShu=n%10;
if(geWeiShu==1){
System.out.println("n="+n+":::满足条件!");
geShu1++;
sum1+=n;
}
}
}
System.out.println("获取1到100内个位数值为1 并且可以被3整除的所有数平均值="+sum1*1.0/geShu1);
数组
- 概念
数组:装相同类型 指定个数个数据 的容器
元素:数组中存储的每个数据称为数组的元素
下标/索引: 元素在数组中位置(顺序),通过数组名+下标可以获取元素
关键字:[]
- 特点
1 装多个数据的容器:对象类型
java中把数据按复杂程度分成两种:1 单值数据--八种基本数据类型(值:常量值)
2 复杂数据--多个基本数据有机组合形成的整体(值:对象)
2 元素类型必须相同
3 元素个数固定
4 创建时 必须目前元素类型和元素个数
- 使用
一个数据使用变量记录
多个相同类型的数据使用数组记录
好处:
int age1,age2,age3,age4,age5;
int[] arrAge=new int[5];
数组会自动给装入期中的元素分配下标:下标从0到length-1 通过arrAge[下标] 可以获取指定元素
- 注意事项
1 数组中的元素 不赋值 有默认初始值:值取决于元素的类型
值:此类型的0 boolean是false
2 获取元素时 下标取值为0到length-1 否则:ArrayIndexOutOfBoundsException
- 内容介绍
//等于一个数组装5个int类型的数据
//创建数组时 必须明确:元素类型 元素个数
int[] arr;//定义数组名
arr=new int[5];//new int[5]在内存中创建一个数组 元素类型时int 元素个数时5
// = 让左边的对象名arr指向右边在内存中new的对象
int[] arr2=new int[5];//每new一个 就一个新的对象
//遍历数组:使用for循环
for(int i=0;i<arr.length;i++){
System.out.println("arr["+i+"]="+arr[i]);
}
//遍历数组:使用foreach:简洁for循环
// 优点:简洁
// 缺点:1 不能获取元素的下标
// 2 元素不能增和删
for(int a:arr2){
System.out.println("a="+a);
}
System.out.println(arr[5]);//ArrayIndexOutOfBoundsException: 5
System.out.println(1+1);
//创建数组的三种格式
//格式1: 元素类型[] 对象名=new 元素类型[元素个数];
//不直到元素的具体值:
int[] arr01=new int[3];//数组中的元素有默认值
arr01[0]=19; arr01[1]=29; arr01[2]=18;//给元素赋值
//格式2: 元素类型[] 对象名=new 元素类型[]{值1,值2,值3...};
//知道元素的具体值
int[] arr02=new int[]{1,2,3,4};
//格式3: 元素类型[] 对象名={值1,值2,值3...};
int[] arr03={1,2,3,4};
- 一维数组的要求
//一维数组的要求
//1:遍历
//2:求最大值
arr=new int[]{1,4,5,7,9,0,2,11,4};
int max1=arr[0];//定义变量记录最大值:初始值为第一个元素
for(int i=1;i<arr.length;i++){
//拿max1与所有元素作比较
max1=(max1>arr[i]?arr[i]:max1);
}
//3: 排序
数组排序:顺序排序
- 概念
顺序排序:依次拿当前元素何其后面的所有元素做比较
- 图解
- 使用代码模拟打印的效果
int[] arr={9,1,3,6,8,2};//要求从小到大排序
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+(i==arr.length-1?"\n":","));
}
//打印的效果
/*
* arr[0]-arr[1] arr[0]-arr[2] arr[0]-arr[3] arr[0]-arr[4] arr[0]-arr[5]
* arr[1]-arr[2] arr[1]-arr[3] arr[1]-arr[4] arr[1]-arr[5]
* arr[2]-arr[3] arr[2]-arr[4] arr[2]-arr[5]
* arr[3]-arr[4] arr[3]-arr[5]
* arr[4]-arr[5]
* */
for(int i=0;i<arr.length-1;i++){//外层for循环记录当前元素的下标:
//System.out.println("当前元素:arr["+i+"]");
for(int j=i+1;j<arr.length;j++){
//arr[i]是当前元素
//arr[j]是当前元素后面的元素
//拿arr[i]和arr[j]比较
System.out.print("arr["+i+"]-arr["+j+"] ");
}
System.out.println();//打印换行
}
- 把打印更改为比较即可
//顺序排序:依次拿当前元素何其后面的所有元素做比较
int[] arr={9,1,3,6,8,2};//要求从小到大排序
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+(i==arr.length-1?"\n":","));
}
//把打印更改为比较
for(int i=0;i<arr.length-1;i++){//外层for循环记录当前元素的下标:
for(int j=i+1;j<arr.length;j++){
//arr[i]是当前元素
//arr[j]是当前元素后面的元素
//拿arr[i]和arr[j]比较
if(arr[i]<arr[j]){
int k=arr[i];arr[i]=arr[j];arr[j]=k;
}
}
}
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+(i==arr.length-1?"\n":","));
}
二维数组
- 概念
n维数组:装指定个数个 n-1维数组的容器
注意:一般说的数组::指的是一维数组
二维数组关键字:[][]
- 学习重点
//二维数组要求:
//1 会创建 2 会遍历
//创建二维数组:
//格式1:元素类型[][] 对象名=new 元素类型[n][m];
int[][] arr1=new int[3][4];
//格式2:元素类型[][] 对象名=new 元素类型[][]{{值1,值2,值3..},{值1,值2,值3..},{值1,值2,值3..}};
int[][] arr2=new int[][]{{1},{1,4,6},{1,5},{0,1,2,4,65}};
//格式3:元素类型[][] 对象名={{值1,值2,值3..},{值1,值2,值3..},{值1,值2,值3..}};
int[][] arr3={{1},{1,4,6},{1,5},{0,1,2,4,65}};
//注意1:元素有默认值 int[][] arr1=new int[3][4];
arr1=new int[][]{{1},{1,4,6},{1,5},{0,1,2,4,65}};
System.out.println("arr1="+arr1);
//arr1=[[I@1540e19d 对象类型@16进制内存地址
System.out.println("arr1.length="+arr1.length);
//arr1.length:二维数组arr1中 一维数组的个数
System.out.println("arr1[0]="+arr1[0]);
//arr1[0]:二维数组arr1中 下标为0的一维数组对象
System.out.println("arr1[0].length="+arr1[0].length);
//arr1[0].length:二维数组arr1中 下标为0的一维数组的元素个数
System.out.println("arr1[1][2]="+arr1[1][2]);
//arr1[1][2]:二维数组arr1中 下标为1的一维数组对象中下标为2的元素的值
//遍历二维数组
for(int i=0;i<arr1.length;i++){ //遍历二维数组中的一维数组
for(int j=0;j<arr1[i].length;j++){//遍历当前一维数组arr[i]中的所有元素
System.out.print(arr1[i][j]+(j==arr1[i].length-1?"\n":","));
}
}
- 练习题
/*
* 数组练习题:
* 创建一个装10个int元素的数组: 1 2 3 0 6 7 8 9 9 10 10
* 1 获取数组的次大值:
* 2 数组倒序:
* 3 打印数组:
* 1 3 5 6 4
* *
* ***
* *****
* ******
* ****
* 4 打印数组:
* 1 3 5 6 4
* *
* * *
* * * *
* * * * *
* * * * *
* * * * * *
* 5 扩展题:
* 打印杨辉三角
*
* 1
* 1 1
* 1 2 1
* 1 3 3 1
* 1 4 6 4 1
* 1 5 10 10 5 1
* 1 6 15 20 15 6 1
* */
第四题:
public class PrintArrayPlus {
public static void main(String[] args) {
int a[] = { 1,3, 5, 6, 4,1};
char b[][] = new char[6][6];
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a[i]; j++) {
b[i][j]=‘*‘;
}
}
// (0,2) (1,2)
//(0,0) (0,1) (0,2) (0,1) (1,1)
//(1,0) (1.1) (1.2) --> (0,0) (1,0)
for (int i = 0; i < b.length; i++) {
for (int j = 0; j < b[0].length; j++) {
System.out.print(b[i][j]);
}
System.out.println();
}
for (int i = 0; i < b[0].length; i++) {
for (int j = 0; j < b.length; j++) {
System.out.print(b[j][b.length-1-i]+"\t");
}
System.out.println();
}
}
}
杨辉三角:
public class YangHuiTriangle {
public static void main(String[] args) {
int a[][] = new int [10][10];
for (int i = 0; i < a.length; i++) {
a[i][0]=1;
a[i][i]=1;
}
for (int i = 2; i < a.length; i++) {
for (int j = 1; j < i; j++) {
a[i][j]=a[i-1][j]+a[i-1][j-1];
}
}
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < i+1; j++) {
System.out.print(a[i][j]+"\t");
}
System.out.println();
}
}
}