语法及元素访问
public class ArrayDemo1 {
public static void main(String[] args) {
// 数据类型
// 1.基本数据类型 : byte short int long float double char boolean
// 2.引用数据类型:①类(String,Scanner,Random,Math..);②接口;③数组
// 数组 :1.它能保存一组数据类型相同数据,我们把数组保存的数据称为元素,2.定长(固定长度)
// 如何声明,创建一个数组
int num = 1;
// ①
int arr[] = new int[5];// 5代表的是数组长度,运行过程中不可变的
// 数组元素的访问--通过索引值(下标值,从0开始,所以长度为n的数组,下标值范围从0到n-1)
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
System.out.println(arr[3]);
System.out.println(arr[4]);
// ArrayIndexOutOfBoundsException 数组越界异常
System.out.println(arr[5]);
}
}
public class ArrayDemo2 {
public static void main(String[] args) {
// new : 开辟堆内存的操作符
int arr[] = new int[4];
int arr1[] = new int[4];
String str[] = new String[2];
System.out.println(str[2]);
// System.out.println(arr[0]);
// arr[0] = 1.2;
// System.out.println(arr[0]);
//
// char arr1[] = new char[3];
// arr1[0] = 'a';
//
// String str[] = new String[2];
// str[0] = "hello";
// str[1] = "world";
// 1.数组有默认值(整型0,浮点型0.0,字符型\u0000,布尔型false,字符串型null)
// 2.长度必须指定
// 3.new关键字
int num = 100;
System.out.println(num);
System.out.println(arr[0]);
}
}
一些错误方式
public class ArrayDemo4 {
public static void main(String[] args) {
// 数组创建方式
// 1. int arr1[] = new int[3];必须指定长度,默认保存3个0
int arr1[] = new int[3];
arr1[0] = 1;
arr1[1] = 3;
arr1[2] = 9;
// 2. int arr2[] = new int[] {1,3,9};长度就是{}中元素的个数,直接赋值
int arr2[] = new int[] {1,3,9};
// 3. int arr3[] = {1,3,9}; 直接赋值
int arr3[] = {1,3,9};
/*
* 注意:一些错误的声明方式
* int arr1[5] = new int[];
* int arr2[] = new int[3] {1,3,9};
* int arr3[3] = {1,3,9};
*/
}
}
数组的遍历(重点)
public class ArrayDemo5 {
public static void main(String[] args) {
// 数组的遍历 : 将数组当中元素,逐个取出来
int arr[] = { 4, 7, 23, 5, 8, 9, 0, -5 };
// 数组长度
// System.out.println(arr.length);
// 遍历
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
String str[] = { "hello", "world", "你好", "大家好" };
for (int i = 0; i < str.length; i++) {
System.out.println(str[i]);
}
}
}
Foreach循环写法
public class ForeachDemo {
public static void main(String[] args) {
// 增强for循环
int arr[] = {1,345,678,890,32};
// for(int i = 0;i < arr.length;i++) {
// int num = arr[i];
// System.out.println(i+","+num);
// }
// int i = 0;
// for(int num : arr) {
// System.out.println(i+","+num);
// i++;
// }
}
}
数组的排序(重点)
public class Demo2 {
public static void main(String[] args) {
// 数组的排序
int arr[] = {12,1,55,7,89,32};
// 1.冒泡排序(必须)
// 外层循环--一共比较多少轮
// for(int i = 1;i < arr.length;i++) {
// // 每一轮比较的次数与第几轮和数组长度有关
// for(int j = 0;j < arr.length - i;j++) {
// if(arr[j] > arr[j+1]) {
// int temp;
// temp = arr[j];
// arr[j] = arr[j+1];
// arr[j+1] = temp;
// }
// }
// }
// for(int num : arr) {
// System.out.print(num+" ");
// }
// 2.选择排序(非必须)
for(int i = 0;i < arr.length - 1;i++) {
for(int j = i + 1;j < arr.length;j++) {
if(arr[i] > arr[j]) {
int temp;
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
for(int num : arr) {
System.out.print(num+" ");
}
}
}
经典练习
public class HomeWork5 {
public static void main(String[] args) {
// 在一个有8个整数(18,25,7,36,13,2,89,63)
// 的数组中找出其中最大的数及其下标
// 解题思路 :
int arr[] = {18,25,7,36,13,2,89,63};
// 假设arr[0]是最大值
int max = arr[0];
// 最大值的下标0
int index = 0;
int i = 0;
for(int num : arr) {
if(num > max) {
max = num;
index = i;
}
i++;
}
System.out.println(index+","+max);
// for(int i = 0;i < arr.length;i++) {
// if(arr[i] > max) {
// max = arr[i];
// index = i;
// }
// }
// System.out.println(index+","+max);
}
}
public class Practice3 {
public static void main(String[] args) {
// 模拟35选7 :生成7个不同的1-35之间的数字(只有一个循环,只涉及一个数组)
boolean b[] = new boolean[35];// 35个false
Random ran = new Random();
for(int i = 0;i < 7;i++) {
// 生成一个1-35之间的数字
int num = ran.nextInt(35)+1;
// 判断之前是否生成过,到b这个数组中检查下标值为num-1对应元素是true还是false来确认是否生成过
if(b[num-1]) {
i--;
}
else {
// 表示生成过
b[num-1] = true;
System.out.print(num+" ");
}
}
}
}
非重点
二维数组的创建
public class ArrayDemo6 {
public static void main(String[] args) {
// 二维数组:数组当中存数组
// int arr[] = new int[3];
// {{1,4,9,11},{20,211},{9}}
int arr[][] = new int[3][];//前面的括号代表长度,后面的无影响
arr[0] = new int[4];
arr[0][0] = 1;
arr[0][1] = 4;
arr[0][2] = 9;
arr[0][3] = 11;
arr[1] = new int[2];
arr[1][0] = 20;
arr[1][1] = 211;
arr[2] = new int[1];
arr[2][0] = 9;
System.out.println(arr[0][1]);
// int arr[] = new int[]{1,2,3};
// int arr[][] = new int[][] {{1,2,3},{2},{3,4,5}};
// int arr1[] = {1,2,3,5,6};
// int arr1[] = {1,2,3,5,6};
// int arr2[][] = {
// {1,2,3},
// {4,5},
// {1,567,98,78,123,345},
// {0}
// };
// System.out.println(arr2.length);// 4
// System.out.println(arr2);
// System.out.println(arr2[0]);
// System.out.println(arr2[0][0]);
}
}
二维数组的遍历
public class Demo1 {
public static void main(String[] args) {
// 1.3种创建方式
int[][] arr1 = new int[3][];
arr1[0] = new int[3];
arr1[0][0] = 10;
arr1[0][1] = 11;
arr1[0][2] = 12;
arr1[1] = new int[1];
arr1[1][0] = 20;
arr1[2] = new int[2];
arr1[2][0] = 30;
arr1[2][1] = 31;
// int arr2[][] = new int[][] {{10,11,12},{20},{30,31}};
// int []arr3[] = {{10,11,12},{20},{30,31}};
// 2.二维数组的遍历
for(int i = 0;i < arr1.length;i++) {
for(int j = 0;j < arr1[i].length;j++) {
System.out.print(arr1[i][j]+" ");
}
System.out.println();
}
}
}
快速排序和数组拷贝
public class Demo3 {
public static void main(String[] args) {
// 快速排序
// int arr[] = {12,1,55,7,89,32};
// Arrays.sort(arr);
// for(int num : arr) {
// System.out.print(num+" ");
// }
// 数组复制
int arr1[] = {1,2,3,4,5};
int arr2[] = {6,7,8,9,10,11,12,13,14,15};
System.arraycopy(arr1, 0, arr2, 4, 2);
for(int num : arr2) {
System.out.print(num+" ");
}
}
}
网友评论