一、basic
5、day05
0)day05_all.txt
回顾:
1.循环:反复执行一段相同或相似的代码
2.循环三要素:
1)循环变量的初始化
2)循环的条件(以循环变量为基础)
3)循环变量的改变(向着循环的结束变)
循环变量:在循环过程中所改变的那个量
3.循环结构:
1)while:先判断后执行,有可能一次都不执行
2)do...while:先执行后判断,至少执行一次
要素1与要素3相同时首选do...while
3)for:固定次数循环
4.break:跳出循环
continue:跳过循环体中剩余语句而进入下一次循环
正课:
1.三种循环结构的更佳适用情况:
1)while:"当..."
2)do...while:"直到..."
要素1与要素3相同时首选do...while
3)for:固定次数循环
2.嵌套循环:
1)循环中套循环,一般多行多列时使用,外层控制行,内层控制列
2)执行规则:外层循环走一次,内层循环走所有次
3)建议:循环的层数越少越好,若必须超三层才能解决,说明设计有问题
4)break只能跳出一层循环
3.程序=算法+数据结构
1)算法:解决问题的流程/步骤(顺序、分支、循环)
2)数据结构:将数据按照某种特定的结构来保存
数怎么存
设计良好的数据结构会导致好的算法
4.数组:
1)相同数据类型元素的集合
2)是一种数据类型(引用类型)
3)数组的定义:
int[] arr = new int[4];
4)数组的初始化:
int[] arr = new int[4];
int[] arr = {1,4,6,8};
int[] arr = new int[]{1,4,6,8};
int[] arr;
arr = {1,4,6,8};
arr = new int[]{1,4,6,8};
5)数组的访问:
5.1)通过(数组名.length)可以获取数组的长度
int[] arr = new int[3];
System.out.println(arr.length);
5.2)通过下标/索引来访问数组中的元素
下标从0开始,最大到(数组长度-1)
int[] arr = new int[3];
arr[0] = 100;
arr[1] = 200;
arr[2] = 300;
arr[3] = 400;
System.out.println(arr[arr.length-1]);
6)数组的遍历:
int[] arr = new int[10];
for(int i=0;i<arr.length;i++){
arr[i] = 100;
}
for(int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}
for(int i=arr.length-1;i>=0;i--){
System.out.println(arr[i]);
}
7)数组的复制:
7.1)System.arraycopy(a,1,a1,0,4);
7.2)int[] a1 = Arrays.copyOf(a,6);
a = Arrays.copyOf(a,a.length+1);
8)数组的排序:
8.1)Arrays.sort(arr);
8.2)冒泡排序:
8.2.1)4个数冒3轮
8.2.2)每一轮都是从第1个元素开始冒
每一次都是和它的下一个元素比
8.2.3)冒出来了就不带它玩了
练习:-----------------至少写一次
1)完成九九乘法表
2)完成求数组元素最大值并放在最后一位
3)完成冒泡算法排序
arr.length-1-i
i=0 比3次
i=1 比2次
i=2 比1次
for(int i=0;i<arr.length-1;i++){
for(int j=0;j<arr.length-1-i;j++){
if(arr[j]>arr[j+1]){
int t=arr[j];
arr[j]=arr[j+1];
arr[j+1]=t;
}
}
}
int[] arr = {56,23,45,1};
第一轮:
56和23比,换,23,56,45,1
56和45比,换,23,45,56,1
56和1比,换,23,45,1,56----------------56冒出来了
第二轮:
23和45比,不换
45和1比,换,23,1,45,56----------------45冒出来了
第三轮:
23和1比,换,1,23,45,56----------------23冒出来了
数据不同,排序算法的效率也不同
这50万个数据-----------------插入排序最快
另50万个数据-----------------冒泡排序最快
另50万个数据-----------------快速排序最快
long a = System.currentTimeMillis();
复杂业务逻辑功能实现
long b = System.currentTimeMillis();
System.out.println(b-a);
B/S
int[] a = {10,20,30,40,50};
int[] b = new int[6];
for(int i=0;i<a.length;i++){
b[i] = a[i];
}
b[0] = a[0];
b[1] = a[1];
b[2] = a[2];
b[3] = a[3];
b[4] = a[4];
int[] arr = {21,45,67,6};
求最大值的算法:
1)假设第1个数是最大值
int max = arr[0];
2)遍历剩余元素,将剩余元素与max对比
若大于max,则修改max的值为较大的
for(int i=1;i<arr.length;i++){
if(arr[i]>max){
max=arr[i];
}
}
max=21/45/67
0------------默认值
'0'
ArrayDemo
int[] arr = new int[10];
for(int i=0;i<10;i++){
arr[i] = 100;
}
for(int i=0;i<10;i++){
System.out.println(arr[i]);
}
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
System.out.println(arr[3]);
System.out.println(arr[4]);
System.out.println(arr[5]);
System.out.println(arr[6]);
System.out.println(arr[7]);
System.out.println(arr[8]);
System.out.println(arr[9]);
arr[0] = 100;
arr[1] = 100;
arr[2] = 100;
arr[3] = 100;
arr[4] = 100;
arr[5] = 100;
arr[6] = 100;
arr[7] = 100;
arr[8] = 100;
arr[9] = 100;
int[] arr = new int[3];
arr[1] = 100;
System.out.println(arr[2]);
System.out.println(arr[arr.length-1]);
arr[0]-----------代表arr中的第1个元素(int)
arr[1]-----------代表arr中的第2个元素(int)
arr[2]-----------代表arr中的第3个元素(int)
arr[3]-----------不合理
int a=0;
int b=0;
int c=0;
b = 100;
double[] d = new double[10];
boolean[] b = new boolean[26];
int[] arr = new int[5];
int a;
int[] a;
double[] b;
boolean[] c;
char[] d;
将1万本书按出版社分类存储-------------设计了数据结构
找java编程思想-------------------------算法不简单
将1万本书按图书类别分类存储-----------设计了数据结构
找java编程思想-------------------------算法简单
在某种情况下,直接想跳出所有循环-----这样的想法
---------------------------------只是你自己想当然的想法
---------------------------------实际应用中没有这样的需求
for(int i=1;i<=100;i++){
for(int j=1;j<=200;j++){
for(int k=1;k<=300;k++){
System.out.println(111);
break;
}
}
}
i=1
j=1
k=1到30
j=2
k=1到30
...
j=20
k=1到30
i=2
j=j=1/2/3/.../19/20/21时结束
...
i=10
j=1/2/3/.../19/20/21时结束
1*4=4 2*4=8 3*4=12 4*4=16
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
水平制表位(8位)
1)先看是否是固定次数循环
1.1)固定次数循环用for
1.2)不固定次数循环,看要素1与要素3
1.2.1)要素1与要素3相同时,用do...while
1.2.2)要素1与要素3不同时,用while
int i=1;
while(i<10){
i++;
}
System.out.println(i);
int i;
for(i=1;i<10;i++){
}
System.out.println(i);
1) ArrayDemo.java
package day05;
import java.util.Arrays;
public class ArrayDemo {
public static void main(String[] args) {
int[] arr = {32,24,2,54,6,13,0,98};
for(int i=0;i<arr.length-1;i++){
for(int j=0;j<arr.length-1-i;j++){
if(arr[j]<arr[j+1]){
int t=arr[j];
arr[j]=arr[j+1];
arr[j+1]=t;
}
}
}
for(int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}
}
}
2)BubbleSort.java
package day05;
public class BubbleSort {
public static void main(String[] args) {
int[] arr = new int[10];
for(int i=0;i<arr.length;i++){
arr[i] = (int)(Math.random()*100);
System.out.println(arr[i]);
}
for(int i=0;i<arr.length-1;i++){
for(int j=0;j<arr.length-1-i;j++){
if(arr[j]<arr[j+1]){
int t=arr[j];
arr[j]=arr[j+1];
arr[j+1]=t;
}
}
}
System.out.println("排序后:");
for(int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}
}
}
3)Homework.java
package day05;
public class Homework {
public static void main(String[] args) {
}
}
4)MaxOfArray.java
package day05;
import java.util.Arrays;
public class MaxOfArray {
public static void main(String[] args) {
int[] arr = new int[10];
for(int i=0;i<arr.length;i++){
arr[i] = (int)(Math.random()*100);
}
int max = arr[0];
for(int i=1;i<arr.length;i++){
if(arr[i]>max){
max=arr[i];
}
}
System.out.println("最大值为:"+max);
arr = Arrays.copyOf(arr,arr.length+1);
arr[arr.length-1] = max;
for(int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}
}
}
5)MultiTable.java
package day05;
public class MultiTable {
public static void main(String[] args) {
for(int num=1;num<=9;num++){
for(int i=1;i<=num;i++){
System.out.print(i+"*"+num+"="+i*num+"\t");
}
System.out.println();
}
}
}