数组作为方法返回值
数组作为方法返回值使用 : 方法定义上,在返回值类型这个位置上,写数组
方法的调用者,在调用方法后,接收方法的返回值,可以使用数组来接收
返回的数组也是内存的地址
public static void main(String[] args) {
//调用方法getArray(),接收方法的返回值
//方法返回的是数组,数组接收 , 收到的也是地址
int[] array = getArray();
System.out.println(array[0]);
}
/*
* 定义方法,返回值类型 是数组
* 方法体中 : 必须有return语句返回,返回数组
*/
public static int[] getArray() {
//创建数组
int[] arr = {1,2,3,4,5,6};
//返回定义好的数组
return arr; // return 返回数组,返回的是数组内存中地址
}
数组的对称性判断
数组的对称判断 : 在一个数组中, 最远端的元素是相等的,依次类推
int[] arr = {1,2,3,4,5,4,3,2,1}
需求 : 已知数组,判断是否是对称
public static void main(String[] args) {
int[] arr = {1,2,3,4,5,4,3,2,1};
//调用方法,判断数组是否对称
//传递数组,获取方法的返回值
boolean bool = isDuiChen(arr);
System.out.println(bool);
}
/*
* 需求 : 已知数组,判断是否是对称
* 方法返回值类型 : 运行后的结果数据类型 布尔
* 方法的参数列表 : 参数是方法中的未知数据, 数组
*/
public static boolean isDuiChen(int[] arr) {
//方法体中,实现判断数组的对称性
//两个变量,保存数组的最小索引和最大索引 (小索引++ , 大索引--)
for(int min = 0 , max = arr.length - 1; min <= max ; min++,max--) {
//比较数组最远端的元素,是否相等
if(arr[min] != arr[max]) {
//判定数组不对称,其他计算不在需要
return false;
}
}
//将数组的所有元素全部比较完成,for循环结束
//没有不相等的,就是对称数组,返回true
return true;
}
字符出现的次数统计
需求 : 键盘输入字符串,可以任意
计算出,这个字符串中,大写字母有几个,小写字母有几个,数字有几个,其他字符有几个
例子 : 键盘数组字符串 abcWA12WE!@
程序的输出结果 : 小写字母3个, 大写字母4个,数字2个,其他字符2个
分析 :
-
输入的数据是字符串, 需要操作字符串中每个字符, 字符串转成数组
- 未来的方法 : 字符串方法 toCharArray() 字符串转成 字符数组 char[]
-
对字符数组遍历
- 遍历的过程中,判断每个字符属于什么??
- 判断字符是大写字母 ASCII 65-90
- 判断字符是小写字母 ASCII 97-122
- 判断字符是数字 ASCII 48-57
-
创建4个变量,作用计数器
- 字符满足条件, 计数器++
public static void main(String[] args) { Scanner sc = new Scanner(System.in); String str = sc.nextLine(); //调用统计字符出现次数的方法 printCount(str); } /* * 定义方法,实现字符出现次数的统计 * 方法返回值 : 没有返回值,直接输出结果 void * 方法参数 : 方法计算的未知数, 字符串 * 实现步骤 : * 1 : 接收到字符串,转成char[]数组 * 2 : 创建4个变量,计数器使用 int * 3 : 遍历char[]数组,取出每个元素 * 4 : ASCII码判断,决定是否是大写,小写,数字,或者是其他字符 * 5 : 满足条件,计数器++ * 6 : 所有的字符数组遍历完成,计算结束了,输出计算结果 * */ public static void printCount(String str) { // 1 : 接收到字符串,转成char[]数组 char[] ch = str.toCharArray(); //2 : 创建4个变量,计数器使用 int int upperCount = 0; //大写字母计数器 int lowerCount = 0; //小写字母计数器 int digitCount = 0; //数字计数器 int otherCount = 0; //其他字符计数器 // 3 : 遍历char[]数组,取出每个元素 for(int i = 0 ; i < ch.length ; i++) { //取出数组的元素,赋变量 char c = ch[i]; //判断c是否是大写字母 if(c >= 'A' && c <= 'Z') { upperCount++; } //判断c是否是小写字母 else if(c >= 'a' && c <= 'z') { lowerCount++; } //判断是否是数字 else if(c >= '0' && c <= '9') { digitCount++; }else { //其他字符 otherCount++; } } // 6 : 所有的字符数组遍历完成,计算结束了,输出计算结果 System.out.println("大写字母出现: "+ upperCount +"次"); System.out.println("小写字母出现: "+ lowerCount +"次"); System.out.println("数字出现: "+ digitCount +"次"); System.out.println("其他字符出现: "+ otherCount +"次"); }
冒泡排序
数组排序 : 默认情况都是升序,从小到大排列
数组 : 原始形态 {5,2,1,4,6} == 排序 {1,2,4,5,6}
排序 : 数组元素的比较,位置交换
冒泡排序 : 数组的相邻元素,比较换位
public static void main(String[] args) {
int[] arr = {2,6,5,-1,-2,3,1};
//调用排序方法
bubbleSort(arr); //传递数组的地址
}
/*
* 定义方法实现数组冒泡排序
* 方法有返回值吗 : 返回数组
* 方法有参数吗 : 要排序哪个数组
*/
public static void bubbleSort(int[] arr) { // arr接收到的也是地址
//外循环控制行数
for(int i = 0 ; i < arr.length - 1; i++) {
//内循环,控制比较换位的次数, 一次递减
// i变量每次++ length-i 越来越小
//j=0 j<3 j++ j变量最大到2
for(int j = 0 ; j < arr.length - i - 1;j++) {
//相邻元素比较换位
if(arr[j] > arr[j+1]) {
int temp = arr[j]; //保存j索引元素
arr[j] = arr[j+1] ; //j+1索引元素,赋值到j
arr[j+1] = temp; //临时变量的值,赋值到j+1
}
}
}
//排序结束,遍历
for(int i = 0 ; i < arr.length;i++) {
System.out.println(arr[i]);
}
}
斐波那契数列
黄金分割 : 1 1 2 3 5 8 ... 从第三个数开始,每个数都是前2项的数字之和
计算出,第12位是多少
数组和方法
public static void main(String[] args) {
int[] arr = new int[12];
//数组元素赋值
arr[0] = 1;
arr[1] = 1;
//从2索引开始遍历
for(int i = 2; i < arr.length ; i++) {
//数组元素的赋值
arr[i] = arr[i-1] + arr[i-2];
}
//数组遍历
for(int i = 0 ; i < arr.length ;i++) {
System.out.println(arr[i]);
}
}
裁判评分
实现裁判评分功能 : 裁判数量是固定 (6个裁判)
每个裁判为运动员评分, 去掉一个最高分,去掉一个最低分, 剩余的4个分数求平均值
实现技术数组和方法.
6个裁判,分数键盘输入, 存储在数组里面,在输入的过程中,实现对数组元素的赋值
去掉一个最高分 : 计算出哪个是最高的 最大值获取
所有的分数,求和 - 最大值 - 最小值
public static void main(String[] args) {
//创建长度为6的数组
int[] array = new int[6];
//调用保存数据的方法
saveData(array);
//调用方法,实现遍历
printArray(array);
//调用方法,获取最大值
int max = getMax(array);
System.out.println("最大值 : "+max);
//调用方法,获取最大值
int min = getMin(array);
System.out.println("最大值 : "+min);
//调用获取平均成绩的方法
int avg =getAvg(array, max, min);
System.out.println("最后的成绩是 :" + avg);
}
/*
* 计算出,去掉最大,和最小值后的平均值
* 方法是否有返回值 : int
* 方法是否有参数 : 数组, 最大值,最小值
*/
public static int getAvg(int[] array,int max,int min) {
//数组数据的求和,定义变量,保存和值
int sum = 0;
for(int i = 0 ; i < array.length;i++) {
sum = sum + array[i];
}
//和值,去掉最大和最小
return (sum - max - min) / (array.length - 2);
}
/*
* 实现获取数组的最小值
* 方法是否有返回值 : int
* 方法是否有参数 : 数组
*/
public static int getMin(int[] array) {
//定义变量,保存数组0索引元素
int min = array[0];
for(int i = 0 ; i < array.length ; i++) {
if(array[i] < min) {
min = array[i];
}
}
return min;
}
/*
* 实现获取数组的最大值
* 方法是否有返回值 : int
* 方法是否有参数 : 数组
*/
public static int getMax(int[] array) {
//定义变量,保存数组0索引元素
int max = array[0];
for(int i = 0 ; i < array.length ; i++) {
if(array[i] > max) {
max = array[i];
}
}
return max;
}
/*
* 定义方法,录入6个数据
* 分别存储在数组中
* 方法是否有返回值 : 无
* 方法是否有参数 : 长度为6的数组
*/
public static void saveData(int[] array) {
Scanner sc = new Scanner(System.in);
//循环遍历数组
for(int i = 0 ; i < array.length ; i++) {
System.out.println("请输入第" + (i+1) +"个成绩");
//输入的整数评分,存储在数组中
array[i] = sc.nextInt();
}
}
/*
* 定义方法,遍历数组
*/
public static void printArray(int[] array) {
for(int i = 0 ; i < array.length ; i++) {
System.out.println(array[i]);
}
}
随机数类
随机产生一个数字,随机数. 伪随机数.
计算机,产生随机数,是根据一个计算方法得来的
public static void main(String[] args) {
Random ran = new Random();
//ran.nextInt(100); 产生随机数,范围是0-100 可能是0,不会到达100
for(int i = 0 ; i < 20 ;i++) {
int num= ran.nextInt(100);
System.out.println(num);
}
}
Eclipse进阶
快捷键
- Ctrl + 1 意见提示 (工具提出意见) ,程序中出现报错的时候,图标是小叉子
- Alt + 箭头 (上或者下) 移动代码行
- Ctrl + Alt + 箭头 (上或者下) 复制并移动代码行
- Ctrl + D 删除当前行
- Alt + Shift + S 自动生成代码
- Ctrl + Shift + F 代码格式化
- Alt + Shift + M 自动抽取方法
- Alt + Shift + R 修改名字
大纲视图 (outline)
- 展示类的结构
- 绿色的实心圆 : public权限方法
- 黄色的实心圆 : protected权限方法
- 蓝色的三角形 : 默认权限方法
- 红色的方块 : private权限方法
- 修改名字 : 所有使用到的内容,全部发送改变
Debug调试模式
程序出现问题找不到,程序不出问题,但是运行的结果和你预期不一样
- 在程序的有效行,行号双击,出现断点
- 当程序,执行到断点的时候,不在执行,停止
- 我们自己,可以手动控制程序运行
- 启动调试模式
- 程序会出现绿色背景,这行还没有被执行
- 右侧窗口 Variables变量,看到程序中所有变量的值
- 按钮 : step over 快捷键F6 代码向下走一行