—————————— ASP.Net+Android+IOS开发、.Net培训、期待与您交流!——————————
获取数组中的元素
练习代码:Demo01.java
/*
遍历数组练习
定义一个方法遍历已知数组并打印每个元素
*/
class Demo01
{
public static void main(String[] args)
{
int[] arr = {6,7,3,1,8,2,19};
printArray(arr);
}
// 打印数组中每个元素
public static void printArray(int[] arr)
{
for (int x = 0; x < arr.length; x++)
{
if (x != arr.length - 1)
System.out.print(arr[x]+", ");
else
System.out.println(arr[x]);
}
}
}
获取数组中的最大值和最小值
练习代码:ArrayTest01.java
/*
给定数组{1,5,6,8,12,3,4,9}
需求:获取上面数组的最大值,最小值。
最大值获取:
思路:
1.需要每一个元素进行比较,则可以定义一个第三方变量进行临时存储每次比较后的最大值。
2.让数组中的每个元素都与这个变量进行比较,用变量存储较大的值。
3.当每个元素比较完成,变量中的值就是最大值。
步骤:
1.定义变量,初始化值为数组的任意元素的值。
2.通过循环对数组进行遍历。
3.在遍历时进行判断,如果遍历到的元素的值大于变量值,就赋值给变量。
*/
class ArrayTest01
{
public static void main(String[] args)
{
int[] arr = {1,5,6,8,12,3,4,9};
System.out.println("max = " + getMax(arr)); // 打印最大值
System.out.println("min = " + getMin(arr)); // 打印最小值
}
/*
获取最大值
*/
public static int getMax(int[] arr)
{
int max = arr[0];
for (int x = 1; x < arr.length; x++)
{
if (max < arr[x])
max = arr[x];
}
return max;
}
/*
获取最小值
*/
public static int getMin(int[] arr)
{
int min = arr[0];
for (int x = 1; x < arr.length; x++)
{
if (min > arr[x])
min = arr[x];
}
return min;
}
}
特点:内循环结束一次,最值就出现在头角标位上。
特点:每比较一次,较小的数往前移,较大的数往后移,第一次比较完毕,最值确定在末尾。
代码练习:ArrayTest02.java
/*
对以下数组进行升序排序:
{1,5,9,6,7,2,3}
选择排序:
思路:
1.先用0角标元素与后面其他的元素比较一下,如果0角标元素较大,则往后排列。
2.在用1角标元素和后面的元素进行比较。
3.以此类推。。。
步骤:
1.定义一个功能,使用for循环嵌套,外循环与内循环的每个元素挨着比较。
2.在比较过程中,用if条件语句判断当前比较的元素是否需要换位。
3.排序完毕无需返回值,因为排序操作后的数组和应用的数组是同一个数组。
冒泡排序:
思路:
1.第一圈,从第一个元素开始,每个元素与后面相邻的一个元素比较,
较大的数放在后面,比较完毕后最大值就在最后角标。
2.第二圈,再从第一个元素开始,但是这次不用比较最后一个角标元素。
3.第三圈,也从第一个元素开始,但是这次不用比较最后一个和倒数第二个元素。
4.以此类推。。。
*/
class ArrayTest02
{
public static void main(String[] args)
{
int arr[] = {1,5,9,6,7,2,3};
printArray(arr);
//selectSort(arr);
bubbleSort(arr);
printArray(arr);
}
// 选择排序
public static void selectSort(int[] arr)
{
for (int x = 0; x < arr.length - 1; x++)
{
for (int y = x; y < arr.length; y++)
{
if (arr[x] > arr[y])
{
swap(arr,x,y);
}
}
}
}
// 冒泡排序
public static void bubbleSort(int[] arr)
{
for (int x = 0; x < arr.length - 1; x++)
{
// -x:让每次比较的元素减少一个(末尾排列),-1:避免角标越界
for (int y = 0; y < arr.length - x - 1; y++)
{
if (arr[y] > arr[y+1])
{
swap(arr,y,y+1);
}
}
}
}
// 位置置换
public static void swap(int[] arr,int x,int y)
{
int temp = arr[x];
arr[x] = arr[y];
arr[y] = temp;
}
// 打印数组中每个元素
public static void printArray(int[] arr)
{
System.out.print("[");
for (int x = 0; x < arr.length; x++)
{
if (x != arr.length - 1)
System.out.print(arr[x]+", ");
else
System.out.println(arr[x] + "]");
}
}
}
使用范围:有序的数组
方法:给定一个字值,在数组中,(角标最小值+最大值)/2得到中间值,如果与该值不同则继续查找,直到找到为止。如果角标最小值大于了角标最小值,则数组中没有该值,应该返回-1,供给调用者处理。
练习代码:ArrayTest03.java
class ArrayTest03
{
public static void main(String[] args)
{
toBin(10);
}
/*
需求:十进制转二进制
*/
public static void toBin(int num)
{
StringBuffer sb = new StringBuffer(); // 存储数据的一个容器
while (num > 0)
{
sb.append(num%2); // 添加每次模2的值到容器内
num = num /2;
}
System.out.println(sb.reverse()); // reverse为容器数据倒序方法
}
}
练习代码:ArrayTest04.java
/*
查表法十进制转十六进制和二进制
*/
class ArrayTest04
{
public static void main(String[] args)
{
//toHex(60);
toBin(6);
}
public static void toHex(int num)
{
char[] chs = {'0','1','2','3',
'4','5','6','7',
'8','9','A','B',
'C','D','E','F'};
// 定义一个临时存储数组
char[] arr = new char[8];
int pos = arr.length;
while (num != 0)
{
int temp = num & 15;
arr[--pos] = chs[temp];
num = num >>> 4;
}
// 遍历数组
for (int x = pos; x < arr.length; x++)
{
System.out.print(arr[x] + ",");
}
}
public static void toBin(int num)
{
char[] chs = {'0','1'};
char[] arr = new char[32];
int pos = arr.length;
while (num != 0)
{
int temp = num & 1;
arr[--pos] = chs[temp];
num = num >>> 1;
}
for (int x = pos; x < arr.length; x++)
{
System.out.print(arr[x]);
}
}
}
练习代码:ArrayTest05.java
class ArrayTest05
{
public static void main(String[] args)
{
toHex(60);
toBin(6);
toBa(60);
}
// 转十六进制
public static void toHex(int num)
{
trans(num,15,4);
}
// 转二进制
public static void toBin(int num)
{
trans(num,1,1);
}
// 转八进制
public static void toBa(int num)
{
trans(num,7,3);
}
public static void trans(int num,int base,int offset)
{
if (num == 0)
{
System.out.println(0);
return ;
}
char[] chs = {'0','1','2','3',
'4','5','6','7',
'8','9','A','B',
'C','D','E','F'};
char[] arr = new char[32];
int pos = arr.length;
while (num != 0)
{
int temp = num & base;
arr[--pos] = chs[temp];
num = num >>> offset;
}
for (int x = pos; x < arr.length; x++)
{
System.out.print(arr[x]);
}
System.out.println();
}
}
定义:在一维数组中的一维数组。
格式1:int[][] arr = new int[3][2];
解释:
1.在arr二维数组中,一共有3个一维数组
2.每一个一维数组中共有两个int类型的元素。
3.每个一维数组的名称分别为:arr[0] arr[1] arr[2]
4.给第一个一维数组中角标为1的元素赋值为23的方法:arr[0][1] = 23
格式2:int[][] arr = new int[3][];
解释:
1.二维数组中有3个一维数组
2.每个一位数组的初始化值为null
3.可以对每个一维数组进行初始化如:
arr[0] = new int[3];
arr[1] = new int[1];
arr[2] = new int[4];
练习代码:Array2Test01.java
/*
对下列二维数组进行每个元素的累加
{{3,4,1,2},{5,9,1,8},{2,4,7,9},{6,5,3,9}}
思路:
1.由于二维数组中的元素是一维数组,而想要得到的值在一维数组内,
应该使用循环嵌套。
2.在取得值后进行累加
步骤:
1.使用外循环遍历每个一维数组
2.使用内循环遍历每个一维数组中的每个元素
3.定义一个变量参与进行内循环累加操作
*/
class Array2Test01
{
public static void main(String[] args)
{
int[][] arr = {{3,4,1,2},{5,9,1,8},{2,4,7,9},{6,5,3,9}};
int sum = 0;
for (int x = 0; x < arr.length; x++)
{
for (int y = 0; y < arr[x].length; y++)
{
sum = sum + arr[x][y];
}
}
System.out.println("sum = " + sum);
}
}
一般格式:
int[][] arr;
int arr[][];
int[] arr[];
特殊格式:
int[] x,y[];
解释:x为一维数组,y为二维数组。
就好比:
int x,y;
拆分后是
int x;
int y;
所以int[] x,y[];
拆分后
int[] x;
int[] y[];