- 一、数组
- 1.初识数组
- 2.数组的创建
- 3.数组的元素
- 4.数组变量
- 5.投票统计
- 6. 遍历数组
- 7. 素数
- 8. 二维数组
- 二、字符与字符串
- 1. 字符类型
- 2. 逃逸字符
- 3. 包裹类型
- 4. 字符串变量
- 5. 字符串操作
- 三、函数
- 1. Math类
- 2. 函数的定义
- 3. 函数的参数
- 4. 函数调用
- 5. 函数内的变量
- 总结
- 1.数组的创建
- 2.数组的元素
- 3.数组变量
- 4. 遍历数组
- 5. 二维数组
- 6. 字符类型
- 7. 逃逸字符
- 8. 包裹类型
- 9. 字符串变量
- 10. 字符串操作
- 11. Math类
- 12. 函数的定义
- 13. 函数的参数
- 14. 函数调用
- 15. 函数内的变量-本地变量
一、数组 1.初识数组
- 引入
- 如果需要运行不被记录的每一个数,那么这种方法就存在问题
- 于有数组可以解决这种问题
2.数组的创建
- 数组的含义
- 定义数组变量
- 理解一个数组
- 数组的创建方法
- 除了通过定义数组的方法外,还可以通过直接初始化数组的方法来创建一个数组
3.数组的元素
- 数组的元素
- 数组的有效下标
- 数组的长度
4.数组变量
- 数组变量赋值
- 发现数组变量之间赋值后,一者数据改变,另一组数据也同样改变
- 原因:
- 数组变量的特性
- 复制数组
- 复制数组要依次循环遍历
5.投票统计
Scanner in = new Scanner(System.in); int[] number = new int[10];//下标为0~9 //1、创建数组 int x = in.nextInt(); while(x != -1) { if(x >= 0 && x <=9) { number[x]++;//java数组默认全部初始化为0 //2、数组参与运算 } x = in.nextInt(); } for(int i = 0; i < number.length; i++) //3、遍历数组输出 { System.out.println(i + "出现了" + number[i] + "次"); }
6. 遍历数组
- 例题
- 用遍历数组解决问题:
Scanner in = new Scanner(System.in); //线性搜索 int[] data = {3, 2, 5, 7, 4, 9, 11, 34, 12, 28}; int x = in.nextInt();//需要搜索的数据 int loc = -1;//下标。没有搜索成功,下标就为-1,无效 for(int i = 0; i < data.length; i++)//遍历搜索 { if(x == data[i]) { loc = i; break; } } if(loc > -1) System.out.println(x + "是第" + (loc + 1) + "个"); else System.out.println(x + "不在其中");
- 遍历数组
3, for-each循环
-
用for-each解决搜索问题:
Scanner in = new Scanner(System.in); //不需要显示下标前提下,更有效率的方法 int[] data = {3, 2, 5, 7, 4, 9, 11, 34, 12, 28}; int x = in.nextInt();//需要搜索的数据 int loc = -1;//下标。没有搜索成功,下标就为-1,无效 boolean found = false; for(int k : data)//for-each循环 【不能修改数组】 { //for-each 表示为data中的每一个元素作为k值来遍历 if(k == x) { found = true; break; } } if(found) System.out.println("找到了!"); else System.out.println("没有找到!");
7. 素数
-
前面所学的求素数程序需要循环n编,效率低下
-
新方法按效率从低到高排序:
-
方法一:
-
方法二:
-
方法三:
Scanner in = new Scanner(System.in); int[] primes = new int[50];//存放已经发现的素数 primes[0] = 2; int cnt = 1;//1.下一个发现的素数要放到primes[cnt]中; //2.有cnt个素数在primes数组里面 MAIN_LOOP: for(int x = 3; cnt < 50; x++) { for(int i = 0; i < cnt; i++) { if(x % primes[i] == 0) { continue MAIN_LOOP;//x不是素数,跳过 } } primes[cnt++] = x;//x为素数,计入primes } for(int k : primes) { System.out.print(k + " "); }
-
方法四:构造素数表
计算机思维:
-代码如下:
Scanner in = new Scanner(System.in); boolean[] isPrime = new boolean[100];//java默认初始化为0/false for(int i = 0; i < isPrime.length; i++)//数组isPrime全部初始化为true { isPrime[i] = true; } for(int i = 2; i < isPrime.length; i++) { if(isPrime[i]) { for(int k = 2; i * k < isPrime.length; k++)//将i的k倍全部赋值为false { isPrime[i*k] = false; } } } for(int i = 2; i < isPrime.length; i++)//遍历输出素数 { if(isPrime[i]) System.out.print(i + " "); }
8. 二维数组
- 二维数组的定义
- 二维数组的遍历
- . 二维数组的初始化(同一位数组)
- 用定义:int[][] a = new int [b][c]来初始化,二维数组里的所有数默认为0
- 直接初始化二维数组
二、字符与字符串 1. 字符类型
- 含义
- 字符计算
- 字母大小写转换
char c = 'b' - 'a' + 'A'; char C = 'B' - 'A' + 'a'; System.out.println("大写为" + c + ";" + "小写为" + C);
- 我的理解:
小写转换成大写:先减去a获得与a的距离,再加上A变成大写
大写转换成小写:先减去A获得与A的距离,再加上a变成小写
- 字符可以比较大小
2. 逃逸字符
- 定义
- 逃逸字符
- t :
3. 包裹类型
- 与基础类型对应的包裹类型
- 包裹类型的用处
- . 运算符
4. 字符串变量
- 定义
- 字符串变量
- 字符串的创建
-
new:
-
直接初始化:
- 字符串的拼接
- 输入字符串
- 字符串赋值与基础类型赋值
- 字符串是对象的管理者,与数组一致,两变量之间赋值后,一者的值改变,令一者也改变
- 基础类型是对象的拥有者,两变量之间赋值后,一者的值改变,令一者不改变
- 比较两个字符串
- ”==“符号比较两者的地址
- equals()比较两者的内容
5. 字符串操作
- compareTo() 比较大小
- length() 获取长度
- charAt() 访问字符
- subString() 得到子串
- indexOf() 寻找字符
- 字符不可变
- 其他字符串操作
- switch-case中的字符串
三、函数
- 调试函数时,需要点击Step Into才能进入函数去调试程序
- 否则Step Over会跳过函数,直接返回结果
- 图中按钮的右边第二个是Step Return, 可以在调试函数时跳出函数
- 以前学习的函数
- 这些函数都是java自带的函数
-
函数的定义
-
素数求和
- 求和
- 求和函数的解析:
3. 函数的参数
- 传参
- 传递的参数类型不匹配
- 参数和值
4. 函数调用
- 调用函数
- 函数返回
- 函数的返回值
-
有返回值的函数:
-
没有返回值的函数:
5. 函数内的变量
- 定义
- 变量的生存期和作用域
- 本地变量的规则
总结 1.数组的创建
2.数组的元素
3.数组变量
4. 遍历数组
5. 二维数组
6. 字符类型
7. 逃逸字符
8. 包裹类型
9. 字符串变量
10. 字符串操作
11. Math类
12. 函数的定义
13. 函数的参数
14. 函数调用
15. 函数内的变量-本地变量