//九九乘法表
for(int i=1;i<=9;i++) {
for(int j=1;j<=i;j++) {
System.out.print(i+""+j+"="+ij+’\t’);
}
System.out.println();
}
//输出+’\t’:利用转义符中的水平制表符自动对齐控制台输出列表
##################################################################
//2.键盘录入税前工资
int money = sc.nextInt();
//3.计算应纳税部分的工资
double before = money - (money*0.1) - 5000;
//4.定义个税变量
double shui = 0;
//5.按照梯度范围计算个税数值
if(before > 0 && before <=3000){
shui = before * 0.03;
}else if(before > 3000 && before <=12000){
shui = 3000*0.03 + (before-3000) * 0.1;
}else if(before > 12000 && before <=25000){
shui = 3000*0.03 + 9000*0.1 + (before-12000)*0.2;
}else if(before > 25000 && before <=35000){
shui = 3000*0.03 + 9000*0.1 + 13000*0.2 + (before-25000)*0.25;
}else if(before > 35000 && before <=55000){
shui = 3000*0.03 + 9000*0.1 + 13000*0.2 + 10000*0.25 + (before-35000)*0.3;
}else if(before > 55000 && before <=80000){
shui = 3000*0.03 + 9000*0.1 + 13000*0.2 + 10000*0.25 + 20000*0.3 + (before-55000)*0.35;
}else if(before > 80000){
shui = 3000*0.03 + 9000*0.1 + 13000*0.2 + 10000*0.25 + 20000*0.3 + 25000*0.35 + (before-80000)*0.45;
}
//6.计算税后工资
double after = money - (money*0.1) - shui;
##################################################################
//do{}while()随机循环一定次数
do {
n= new Random().nextInt(300);
System.out.println(“这次是:”+n);
}while(n>100);
##################################################################
数组开辟连续的存储空间,每一位上都有对应的默认值.
每一个数组元素都有自己的下标值(数组名[下标名])
数组名是一个引用类型变量,保存了数组的地址(正是因为变量没法存放多个值,我们才使用数组).
创建数组过程分析:
程序创建数组 int[] a = new int[5]; 时发生了什么?
① 在内存中开辟连续的空间,用来存放数据,长度是5
② 给数组完成初始化过程,给每个元素赋予默认值,int类型默认值是0
③ 数组完成初始化会分配一个唯一的地址值
④ 把唯一的地址值交给引用类型的变量a去保存
- 可以根据下标,改元素的值
数组名是个引用类型的变量,它保存着的是数组的地址,不是数组中的数据
##################################################################
数组创建方式分为动态和静态
动态初始化//(类型+长度)
int[] a = new int[5];
/*动态初始化后赋值:
d[0]=‘H’;
d[1]=‘e’;
d[2]=‘l’;
d[3]=‘l’;
d[4]=‘o’;
*/
静态初始化//明确告诉数组我要存什么值(类型+长度+每个元素的值)
① int[] b = new int[]{1,2,3,4,5};
② int[] c = {1,2,3,4,5};
##################################################################
char基本类型,char[]引用类型
由于Java对char类型做了底层处理,所以char[]可以直接打印具体内容.
但除了char类型以外,其他任何类型的数组想要查看数组中的具体元素需要使用数组的工具类来完成.—>System.out.println(Arrays.toString(数组名));
##################################################################
数组的遍历
遍历:从头到尾依次
数组名.length—>数组总长度
数组长度可为0
Arrays–>数组工具类(包含一些数组常用方法)
数组工具类Arrays的sort()方法对数组元素进行排序
数组长度不可变,但可重新赋为一个新数组
Arrays.copyOf(数组,新的长度)
##################################################################
int[] 数组名
和
int 变量名
前面的类型定义是同等地位的,不过各类数组均为引用类型.
Arrays.copyOf(要复制哪个数组,新数组的长度)
常用于“数组的缩容”和“数组的扩容”
↓ ↓ ↓
“数组的缩容”:先创建指定长度的新数组,然后按照这个长度从原数组中复制对应个数的元素,类似截取的效果
↓ ↓ ↓
“数组的扩容”:没有被复制元素的位置仍然是数组类型的默认值
↓ ↓ ↓
"指定首尾"截取数组的元素(含头不含尾,[2,4]–>截取数组下标为2和3的元素)
int[] to4 = Arrays.copyOfRange(from, 2, 4);
↓ ↓ ↓
“普通复制”长度一致.
##################################################################
冒泡排序:6个数字–>用5轮,因为最后一轮可以一次确定两个数字.
思考:
1)几个元素参与比较?
2)共比较几轮?
3)每轮怎么比较?
4)每轮结果?
*)哪些相邻元素可以不参与比较?
可通过嵌套for循环实现:
外层循环来控制比较轮数:最大轮数=个数-1
内层循环来控制每轮比较的次数
在比较过程中,如果顺序不对,就互换元素的位置
##################################################################
代码的—解耦风格:
功能与功能之间不会因为一损坏而影响所有功能,互相之间一定程度上独立.
代码编写:伪代码模块—>测试---->优化修改---->实际代码填充
↓ ↓ ↓
for(int i = 1;i<=a.length-1;i++) {
//i代表轮数
System.out.println(“外层第”+i+“轮”);
//2.内层循环:控制的是每一轮比较的次数,j代表下标
for(int j=0;j<a.length-i;j++) {
System.out.println("内层第"+(j+1)+"次比较");
}
System.out.println();
}
↓ ↓ ↓
for(int j=0;j<a.length-i;j++) {
if(a[j]>a[j+1]) {//相邻两个元素顺序不对就互换位置
tmp = a[j];
a[j]=a[j+1];
a[j+1]=tmp;
}System.out.println(“内层第”+(j+1)+“次比较后”+Arrays.toString(a));
}System.out.println();
##################################################################
数组初始化,赋值.
数组的工具类Arrays【to3String,sort,copyOf】
数组遍历+冒泡排序
##################################################################
JAVA_BASIC结束
##################################################################
面向过程:一种思想,意思是我们做任何事,都需亲力亲为,强调过程.
面向对象:一种编程思想,相对面向过程,可以由原来问题的执行者变为指挥者,进而把生活中很多复杂的问题变得简单化。
面向对象三大特征:
1)封装:把相关的数据封装成一个“类”组件
2)继承:是子类自动共享父类属性和方法,这是类之间的一种关系
3)多态:增强软件的灵活性和重用性
类
Java语言最基本单位就是类,类似于类型。
类是一类事物的抽象。
可理解为模板或设计图纸。
对象
每个对象具有三个特点:对象的状态,对象的行为和对象的标识。
状态用来描述对象基本特征。
行为用来描述对象功能。
标识指对象在内存中都有一个唯一的地址值用来和其他对象区分开来。
类是一类事物的抽象,对象是具体的实现。
##################################################################
对象在内存中的存储
Java把内存分成5大区域,我们【重点关注】栈和堆。
一般来讲局部变量存在栈中,方法执行完毕内存就被释放
对象(new出来的东西)存在堆中,对象不再被使用时,内存才会被释放
每个堆内存的元素都有地址值
对象中的属性都是有默认值的
TIPS: 栈与队列指的是一种【数据结构】。
栈:先进后出(FILO – First In Last Out)
队列:先进先出(FIFO – First In First Out)
!!!堆中存放的是对象!!!
##################################################################
<创建对象_解释A>
创建对象—>会在堆内存中开辟一块空间专门存放对象,
↓
在这块存储空间中把属性和方法准备好后,
↓
会生成一个唯一的对象地址值(这个地址值唯一,通过它来区分对象).
↓
存储所声明对象地址的对象名变量
↓
存储对象地址(对象名变量)—>这个变量存放在栈
##################################################################
<创建对象_解释B>
1.在栈内存中开辟一段空间,存放引用类型变量P,并把P压入栈底
2.在堆内存中开辟一块空间,存放Phone对象
3.完成对象的初始化,并赋予默认值
4.给初始化完毕的对象赋予唯一的地址值
5.把地址值交给引用类型变量P来保存
##################################################################
<时间复杂度>
最简单的算法就是把解空间的所有元素完全遍历一遍,逐个检测元素是否是我们要的解。这是最直接的算法,实现往往最简单。
但是当解空间特别庞大时,这种算法很可能导致工程上无法承受的计算量。这时候可以利用不完全遍历方法——例如各种搜索法和规划法——来减少计算量。
<常用的设计模式>
1)分治法:把一个问题分割成互相独立的多个部分分别求解的思路
2)动态规划法:当问题的整体最优解就是由局部最优解组成的时候
3)贪心算法:常见的近似求解思路
4)简并法:把一个问题通过逻辑或数学推理,简化成与之等价或者近似的、相对简单的模型
##################################################################