package _5_4_数组的基本操作;
public class _5_4_Example_1 {
public static void main(String[] args) {
// TODO 自动生成的方法存根
//遍历一维数组
System.out.println("遍历一维数组:");
int month[]={31,28,31,30,31,30,31,31,30,31,30,31};
for(int i=0;i<month.length;i++){
System.out.println("第"+(i+1)+"月有"+month[i]+"天");
}
//遍历二维数组
System.out.println("遍历二维数组:");
int array[][]=new int[][]{{1,8,9},{4,3,5,6},{9,8}};
for(int i=0;i<array.length;i++){
for(int j=0;j<array[i].length;j++)
System.out.print(array[i][j]+"\t");
System.out.println();
}
//使用foreach语句遍历数组
for(int[] arr : array){
for(int x : arr)
System.out.print(x+"\t");
System.out.println();
}
}
}
package _5_4_数组的基本操作;
import java.util.Arrays;
//填充替换数组元素
public class _5_4_Example_2 {
public static void main(String[] args) {
// TODO 自动生成的方法存根
//fill(int []a,int value)将指定int型元素分配给int型数组的每个元素
int a[]=new int[6];
System.out.println("未赋值的数组:");
for(int i=0;i<a.length;i++)
System.out.print(a[i]+" ");
Arrays.fill(a, 8);
System.out.println("\n修改后的数组:");
for(int i=0;i<a.length;i++)
System.out.print(a[i]+" ");
//包括起点不包括终点的替换
//fill(int []a,int fromIndex,int toIndex,val)
Arrays.fill(a, 1, 4, 15);
System.out.println("\n修改后的数组:");
for(int i=0;i<a.length;i++)
System.out.print(a[i]+" ");
//对数组进行排序
int arr[]={34,4,13,76,6,9,790,89};
System.out.println("\n\n原数组:");
for(int i=0;i<arr.length;i++)
System.out.print(arr[i]+" ");
Arrays.sort(arr);//升序排序
System.out.println("\n排序后的数组:");
for(int i=0;i<arr.length;i++)
System.out.print(arr[i]+" ");
//复制数组
//copyOf()复制数组至指定长度
//copyOfRange()将指定数组制定长度复制到一个新的数组中
int array_1[]={3,6,9,23,45,78};
System.out.println("\n\n原数组:");
for(int i=0;i<array_1.length;i++)
System.out.print(array_1[i]+" ");
int[] newArray_1=Arrays.copyOf(array_1, 8);
System.out.println("\n调用copyOf(),新数组:");
for(int i=0;i<newArray_1.length;i++)
System.out.print(newArray_1[i]+" ");
int[] newArray_2=Arrays.copyOfRange(array_1, 1, 7);
System.out.println("\n调用copyOfRange(),新数组:");
for(int i=0;i<newArray_2.length;i++)
System.out.print(newArray_2[i]+" ");
}
}
package _5_4_数组的基本操作;
public class _5_4_Example_3 {
public static void main(String[] args) {
// TODO 自动生成的方法存根
//对比一维二维数组所占内存
//一维数组占用内存
int num1=1024*1024*2;//数组元素个数
int array1 []=new int[num1];//定义int型数组
for(int i=0;i<array1.length;i++)//赋值
array1[i]=i;
//获得占用内存数,并将其转化为MB
long memory1=Runtime.getRuntime().totalMemory()/1024/1024;
System.out.println("一维数组占用内存:"+memory1);
//二维数组占用内存
int num2=1024*1024;//数组元素个数
int array2 [][]=new int[num2][2];//定义int型数组
for(int i=0;i<array2.length;i++)//赋值
{
array2[i][0]=i;
array2[i][1]=i;
}
//获得占用内存数,并将其转化为MB
long memory2=Runtime.getRuntime().totalMemory()/1024/1024;
System.out.println("二维数组占用内存:"+memory2);
}
}
package _5_4_数组的基本操作;
//使用直接插入法排序
public class _5_4_Example_4 {
public static void main(String[] args) {
// TODO 自动生成的方法存根
int number=10;
int intArray []=new int[number];
System.out.println("排序前:");
for(int i=0;i<intArray.length;i++)
{
intArray[i]=intArray.length-i;
System.out.print(intArray[i]+" ");
}
//插入排序算法:每次插入的数前面的数都是排好序的
for(int i=1;i<intArray.length;i++)
{
int j=i-1;
int index=intArray[i];//记录index一便宜之后的交换
while(j>=0&&intArray[j]>intArray[j+1])
{
//每当找到比这个数大的数的时候就交换,
//直到之前的数没有比这个数大的
intArray[j+1]=intArray[j];//
intArray[j]=index;
j--;
}
}
System.out.println("\n排序后:");
for(int i=0;i<intArray.length;i++)
System.out.print(intArray[i]+" ");
}
}
package _5_4_数组的基本操作;
//使用冒泡排序法排序
public class _5_4_Exercise_1 {
public static void main(String[] args) {
// TODO 自动生成的方法存根
int number=10;
int array[]=new int[number];
System.out.println("冒泡排序前数组为:");
for(int i=0;i<array.length;i++){
array[i]=array.length-i;
System.out.print(array[i]+" ");
}
System.out.println();
//冒泡排序:较小元素向前排,较大元素向后排
//for(int i=0;i<array.length-1;i++)
//上面注释中写的也可以,因为最后一趟就一个元素,不需比较,只用九趟就行
for(int i=0;i<array.length;i++){//每一趟循环都找出较小的向前排
for(int j=array.length-1;j>0;j--){
if(array[j]<array[j-1]){//把较小元素循环向前排
int temp=array[j];
array[j]=array[j-1];
array[j-1]=temp;
}
}
System.out.println("第"+(i+1)+"趟循环得到:");
for(int k=0;k<array.length;k++)
System.out.print(array[k]+" ");
System.out.println();
}
}
}
package _5_4_数组的基本操作;
//输出九宫格:数字1-9组成3*3矩阵,使得行列对角线三个数之和等于15
//采用循环求解
//九宫格分为中,上,下,左,右,左上,右上,左下,右下
public class _5_4_Exercise_2 {
public static void main(String[] args) {
// TODO 自动生成的方法存根
int arr[][]=new int[3][3];
int a=2;//第三行的行下标
int b=3/2;//第二列的列下标
for(int i=1;i<=9;i++){
arr[a++][b++]=i;
if(i%3==0){//如果i是3的倍数
a=a-2;
b=b-1;
}else{//如果i不是3的倍数
a=a%3;
b=b%3;
}
}
System.out.println("输出九宫格:");
for(int i=0;i<3;i++){
for(int j=0;j<3;j++)
System.out.print(arr[i][j]+" ");
System.out.println();
}
}
}