文章目录
- 一、数组
- 1.初识数组
- 2.数组的创建
- 3.数组的元素
- 4.数组变量
- 5.投票统计
- 6. 遍历数组
- 7. 素数
- 8. 二维数组
- 二、字符与字符串
- 1. 字符类型
- 2. 逃逸字符
- 3. 包裹类型
- 4. 字符串变量
- 5. 字符串操作
- 三、函数
- 1. Math类
- 2. 函数的定义
- 3. 函数的参数
- 4. 函数调用
- 5. 函数内的变量
- 总结
- 1. 数组
- 2. 字符与字符串
- 3. 函数
一、数组
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, 可以在调试函数时跳出函数
1. Math类
2. 函数的定义
- 以前学习的函数
- 这些函数都是java自带的函数
- 函数的定义
- 素数求和
- 求和
- 求和函数的解析:
3. 函数的参数
- 传参
- 传递的参数类型不匹配
- 参数和值
4. 函数调用
- 调用函数
- 函数返回
- 函数的返回值
- 有返回值的函数:
- 没有返回值的函数:
5. 函数内的变量
- 定义
- 变量的生存期和作用域
- 本地变量的规则
总结
1. 数组
- 数组的创建
- 数组的元素
- 数组变量
- 遍历数组
- 二维数组
2. 字符与字符串
- 字符类型
- 逃逸字符
- 包裹类型
- 字符串变量
- 字符串操作
3. 函数
- Math类
- 函数的定义
- 函数的参数
- 函数调用
- 函数内的变量-本地变量