//x/y=3...10 x+y+3+10=163 ?x&y
package com;
import java.util.Scanner;
//一个项目中必须只存在一个main()方法
public class Application {
public static void main(String[] args) {
double[] n = {1.1,1.2,1.3,1.4,1.5};//省略了new double[5]
//遍历
for (int i = 0; i < n.length; i++) {
System.out.println(n[i]);//遍历
}
//计算和
float sum =0;
for (int i = 0; i < n.length; i++) {
sum = (float) (sum+n[i]);
}
System.out.println(sum);
//寻找最大值
float max=0;
for (int i = 0; i < n.length; i++) {
if (n[i]>max){
max= (float) n[i];
}
}
System.out.println(max);
//增强for循环
for (double i:
n) {
System.out.println("for_each"+i);
}
//倒叙
for (int i = n.length - 1; i >= 0; i--) {
System.out.println("倒叙"+n[i]);
}
}
}
数组是具有相同数据类型的有序集合
每一个数据称为一个数组元素,通过下标来访问(下标0为第一个元素)
5.1数组的声明与创建
1、首先必须声明数组变量,后方可使用:
dataType[] arrayRefVar; //首选的方法
dataType arrayRefVar[]; //效果相同
2、Java语言使用new操作符来创建数组
dataType[] arrayRefVar = new dataType[arraySize];
int[] a1 = new int[5];
double[] a2 = new double[10];
//x/y=3...10 x+y+3+10=163 ?x&y
//x/y=3...10 x+y+3+10=163 ?x&y
package com;
import java.util.Scanner;
//一个项目中必须只存在一个main()方法
public class Application {
public static void main(String[] args) {
double[] nums = new double[5];
double[] n = {1.1,1.2,1.3,1.4,1.5};//省略了new double[5]
int[] num = new int[5];
char[] c = new char[5];
boolean[] b = new boolean[2];
String[] s = new String[]{"hello","world","Come On!"};
num[0] =1;
num[1] =2;
num[3]=3;
nums[1]=1.2;
System.out.println(num[2]);
System.out.println(n[3]);
System.out.println(nums[0]);
System.out.println(s[0]);
System.out.println(s.length);
System.out.println(b[0]=true);
}
}
3、数组的元素是通过索引访问的,数组索引从零开始。
4、获取数组长度:
arrays.length
package com.hch.array;
public class Demo01_array {
//变量类型 变量名字 = 变量的值;
public static void main(String[] args) {
/**
* 1、定义;声明一个数组
* int[] nums1;
* 2、创建一个数组
* nums1 = new int[10];
* int nums2[]; //定义2;了解。
* */
int[] nums1 = new int[10]; //声明创建一起完成
//给数组元素赋值
nums1[0] = 1;
nums1[1] = 2;
nums1[2] = 3;
nums1[3] = 4;
nums1[4] = 5;
nums1[5] = 6;
nums1[6] = 7;
System.out.println(nums1[3]);
System.out.println(nums1[7]);//未赋值的数组元素默认为0
// System.out.println(nums1[10]); 数组下标越界错误
//计算所有的数组元素的和
int sum = 0;
//获得数组的长度 array.length
for (int i = 0; i < nums1.length; i++) {
sum = sum + nums1[i];
}
System.out.println(sum);
}
}
5.2 数组的基本特点
1、长度确定;一旦创建,其大小不可变更;
2、数组中元素数据类型必须相同;
3、数据类型为任意包括基本类型和引用类型;
4、数组变量属于引用类型;
5、数组也可看作对象,其中的数组元素为该对象的成员变量;
6、数组对象本身在堆中
7、下标合法区间:[0 , length-1],如果越界就会报错:ArrayIndexOutOfBoundsException
:数组下标越界异常
5.3三种初始化
5.3.1静态初始化
int[] a = {1,2,3};
Man[] mans = {new Man(1,1),new Man(2,2)};
5.3.2动态初始化
int[] a = new int[2];
a[0] = 1;
a[1] = 2;
5.3.3数组的默认初始化
·数组是引用类型;其元素相当于类的实例变量;因此数组一经分配空间,其中的每个元素被隐式初始化;
package com.hch.array;
public class Demo02_array {
public static void main(String[] args) {
//静态 初始化==>创建+赋值
int[] a = {1,2,3};
System.out.println(a[2]);
//动态初始化(包含默认初始化)
int[] b = new int[3];
b[0] = 1;
}
}
5.4数组的使用
普通for循环
package com.hch.array;
public class Demo03_array {
public static void main(String[] args) {
int[] array = {1,2,3,4,5};
//遍历所有元素
for (int i = 0; i < array.length; i++) {
System.out.println(array[i]);
}
System.out.println("<=============>");
//计算和
int sum = 0;
for (int i = 0; i <array.length ; i++) {
sum = sum + array[i];
}
System.out.println(sum);
System.out.println("<=============>");
//查找最大元素
int max = array[0];
for (int i = 0; i < array.length; i++) {
if (array[i] > max){
max = array[i];
}
}
System.out.println(max);
}
}
For-Each循环
package com.hch.array;
//增强for循环 for-each
public class Demo04_array {
public static void main(String[] args) {
int[] a ={1,2,3};
//JDK1.5以上,没有下标
/**
*/
for (int i : a) {
System.out.println(i);
}
printArray(a);
}
}
数组作为方法入参
package com.hch.array;
public class Demo04_array {
public static void main(String[] args) {
printArray(a);
}
//打印数组元素
public static void printArray(int[] a){
for (int i = 0; i < a.length; i++) {
System.out.print(a[i]+" ");
}
}
}
数组作为返回值
package com.hch.array;
public class Demo04_array {
public static void main(String[] args) {
int[] reverse = reverse(a);
printArray(reverse);
}
//打印数组元素
public static void printArray(int[] a){
for (int i = 0; i < a.length; i++) {
System.out.print(a[i]+" ");
}
}
//反转数组
public static int[] reverse(int[] a){
int[] result = new int[a.length];
//反转操作
for (int i = 0,j = result.length -1 ; i < a.length; i++,j--) {
result[j] = a[i];
}
return result;
}
}
5.5多维数组
“数组的数组,如:二维数组是一个特殊的一维数组”
二维数组:
int a[][] = new int[2][4];
package com.hch.array;
public class Demo05_array {
public static void main(String[] args) {
// int[][] array = new int[3][3];
int[][] array = {{1,2},{3,4},{5,6}};
System.out.println(array[2][0]);
}
}
5.6 Arrays类
数组的工具类:java.util.Arrays
(查看JDK
帮助文档)
Array类中的方法都是用static修饰的静态方法,在使用的时候直接使用类名来调用
功能:
1、给数组赋值:通过fill方法
2、对数组排序:通过sort方法,按升序
3、比较数组:通过equals方法比较数组中元素值是否相等
4、查找数组元素:通过binarySearch
方法对排序好的数组进行二分查找操作
package com.hch.array;
import java.util.Arrays;
public class Demo06_array {
public static void main(String[] args) {
int[] a = {1,5,7,34,543,234,1234};
// System.out.println(Arrays.toString(a)); 打印数组元素
//对数组进行排序
Arrays.sort(a); //升序
System.out.println(Arrays.toString(a));
}
}
5.7 冒泡排序
八大排序之一:冒泡排序、选择排序、插入排序、快速排序、堆排序、希尔排序、归并排序、计数排序
两层循环;外层冒泡轮数;里层依次比较
package com.hch.array;
import java.util.Arrays;
/**
* 冒泡排序
* 1、比较数组中两个相邻的元素,如果第一个比第二个大就交换位置
* 2、每一次比较都会产生一个最大、或者最小的数字
* 3、下一轮则可以少一轮排序
* 4、依次循环,直到结束
* */
public class Demo07_array {
public static void main(String[] args) {
int[] a = {1,45,43,7,65,234,12,11};
int[] s = sort(a);
System.out.println(Arrays.toString(a));
}
public static int[] sort(int[] array){
int temp = 0;
//外层循环,判断循环次数
for (int i = 0; i < array.length-1; i++) {
boolean flag = false;//通过flag标识,减少没有意义的比较
//内层循环,判断大小则交换位置
for (int j = 0; j < array.length-1-i; j++) {
if (array[j+1] < array[j]){ // < :从小到大 > : 从大到小
temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
flag = true;
}
}
if (flag == false){
break;
}
}
return array;
}
}
5.8扩展:稀疏数组
package com.hch.array;
public class Demo08_array {
public static void main(String[] args) {
//1、创建一个二维数组 0:没有棋子 1:黑棋 2:白棋
int[][] array1 = new int[11][11];
array1[1][2] = 1;
array1[2][3] = 2;
//输出原始数组
for (int[] ints:
array1) {
for (int anInt:
ints) {
System.out.print(anInt+"\t");
}
System.out.println();
}
System.out.println("<==========================>");
//转换为稀疏数组保存
//1、获取有效值个数
int sum = 0;
for (int i = 0; i < 11; i++) {
for (int j = 0; j < 11; j++) {
if (array1[i][j] != 0){
sum++;
}
}
}
System.out.println("有效值个数:"+sum);
//2、创建一个稀疏数组
int[][] array2 = new int[sum+1][3];
array2[0][0] = 11;
array2[0][1] = 11;
array2[0][2] = sum;
//3、遍历二维数组,将非零的值存放在稀疏数组中
int count = 0;
for (int i = 0; i < array1.length; i++) {
for (int j = 0; j < array1[i].length; j++) {
if (array1[i][j] != 0){
count++;
array2[count][0] = i;
array2[count][1] = j;
array2[count][2] = array1[i][j];
}
}
}
System.out.println("<==========================>");
System.out.println("稀疏数组:");
//4、输出稀疏数组
for (int i = 0; i < array2.length; i++) {
System.out.println(array2[i][0]+"\t"+
array2[i][1]+"\t"+
array2[i][2]+"\t");
}
}
}