java从零到项目实践(五)
作者:互联网
Day 4(数组)
到此为止,java基础语法部分全部结束,为坚持到这的自己加个油!
文章目录
java数组
数组概述
要点:相同类型数据、按一定先后次序、下标从0开始(下标为0对应第一个元素)
数组声明创建
示例代码:
public class creatDemo01 {
public static void main(String[] args) {
//创建数组: 变量类型 + 变量名 = 变量值
int[] x; //声明一个int类型的数组x
x = new int[5]; //用new分配一个大小为10的空间给x,这里才是实际创建数组x
//声明数组也可采用c/c++的方式
//int y[];
//创建数组也可一步到位:
int[] y = new int[10];
//定义数组中的元素
x[0] = 1;
x[1] = 2;
x[2] = 3;
x[3] = 4;
x[4] = 5;
//计算总和
int sum = 0;
for (int i = 0; i < x.length; i++) {//length属性获取数组长度
sum = sum + x[i];
//显示数组元素
//System.out.println("x[" + i + "]: " + x[i]);
}
System.out.println(sum);
}
}
三种初始化及内存分析
声明创建时的内存管理:
三种初始化:
示例代码:
public class arrayDemo02 {
public static void main(String[] args) {
//静态初始化: 创建+赋值
int[] a = {1,2,3,4,5};
System.out.println(a[0]);
System.out.println("======================");
//动态初始化: 包含了默认初始化(即所有数据在未赋值前均以默认值为初始值),例如这里除了b[0]和b[1]外,所有数组元素全为0
int[] b = new int[5];
b[0] = 12;
b[1] = 3;
for (int i=0; i<b.length; i++){
System.out.println(b[i]);
}
}
}
数组边界
数组使用
示例代码:
public class arrayDemo03 {
public static void main(String[] args) {
int[] a = {1,2,3,4,5};
//普通for循环使用
for (int i = 0; i < a.length; i++) {
System.out.println("普通for循环打印:" + a[i]);
}
System.out.println("===================");
//for-each增强for循环,只适用于遍历打印数组元素,无下标操作JDK1.5
for (int i : a) {
System.out.println("for-each打印: " + i);
}
System.out.println("===================");
Array(a);
System.out.println("====================");
int[] P = pArray(a);
Array(P);
}
//数组作为方法入参
public static void Array(int[] a) {
for (int i = 0; i < a.length; i++) {
System.out.println(a[i]);
}
}
//数组作为返回值
//数组翻转
public static int[] pArray(int[] a) {
int[] value = new int[a.length];
//翻转的操作
for (int i=0,j=a.length-1; i<a.length; i++, j--){
value[i] = a[j];
}
return value;
}
}
多维数组
多维数组实质是数组的嵌套,即数组的每个元素仍然为一个数组
示例代码:
public class arrayDemo04 {
public static void main(String[] args) {
//二维数组
/*
1,2 a[0]
2,3 a[1]
3,4 a[2]
4,5 a[3]
*/
int[][] a = {{1,2},{2,3},{3,4},{4,5}};//两个[]表示二维数组
Array(a[0]);
System.out.println("========");
//遍历数组中的所有元素
for (int i=0; i<a.length; i++){
for (int j=0; j<a[i].length; j++){
System.out.print(a[i][j]);
}
}
}
//打印数组中的元素
public static void Array(int[] a) {
for (int i = 0; i < a.length; i++) {
System.out.println(a[i]);
}
}
}
Arrays类
拓展:冒泡排序
示例代码:
import java.util.Arrays;
public class maopaoDemo05 {
public static void main(String[] args) {
int[] a = {1,3,2,2,4,5,4,33,1,546,12,343,3};
int[] b = array(a);
//打印数组元素时,不能直接打印,要么通过自己写方法遍历出来,要么用Arrays类提供的Arrays.toString(参数)
//System.out.println(b);//[I@135fbaa4,
System.out.println(Arrays.toString(b));
}
//冒泡法:
/*
1.比较数组中两个相邻的元素,如果第一个数比第二个数大(或小),就交换位置
2.每一次比较都会产生一个最大或最小的数字
3.下一轮排序次数依次减少
4.依次循环,直到结束
*/
public static int[] array(int[] a) {
int temp = 0; //用来实现数据交换的媒介
for (int i=0; i<a.length-1; i++){
for (int j=0; j<a.length-1-i; j++){
if (a[j+1]<a[j]){
temp = a[j+1];
a[j+1] = a[j];
a[j] = temp;
}
}
}
return a;
}
}
稀疏数组
稀疏数组主要解决的问题是,当前数组中存储了大量无意义的0元素时,采用该方法进行有效的压缩操作。
以上表格为例:
【0】行表示,该数组共有6行、7列、8个有效数字
【1】行表示,第一个有效数字为22,在第0行、3列
【2】行表示,第二个有效数字为15,在第0行、6列
……
示例代码:
public class arrayDemo06 {
public static void main(String[] args) {
//需求:编写一个矩阵,将其转化为稀疏矩阵并实现还原
int[][] a1 = new int[10][10];
a1[1][2] = 1;
a1[2][3] = 2;
//输出原始的数组
System.out.println("原始数组:");
array(a1); //调用方法array输出数组
//转换为稀疏数组保存
//1.获取有效值的个数
int sum = 0;
for (int i=0; i<a1.length; i++){
for (int j=0; j<a1.length; j++){
if (a1[i][j]!=0){
sum++;
}
}
}
System.out.println("===============");
System.out.println("有效个数为:" + sum);
//2.声明创建一个稀疏数组
//行数:有效个数+1; 列数:3
int[][] a2 = new int[sum+1][3];
//3.根据系数矩阵特点赋值
//稀疏数组第一行:存储的是原数组整体信息
a2[0][0] = a1.length; //a1的行数
a2[0][1] = a1.length; //a1的列数
a2[0][2] = sum; //有效数据个数
//稀疏数组第二行开始:每行依次存储第i个有效数字以及所在的行列信息
int count = 0;//记录有效数字出现次数,对应记录在稀疏数组的相应行上
//找到有效数字所在位置
for (int i=0; i<a1.length; i++){
for (int j=0; j<a1.length; j++){
if (a1[i][j]!=0){
count++;
a2[count][0] = i;
a2[count][1] = j;
a2[count][2] = a1[i][j];
}
}
}
System.out.println("输出稀疏数组:");
array(a2);//调用方法array输出数组
System.out.println("=================");
//将稀疏数组还原为原始数组
//1.声明创建一个原始数组
//稀疏数组[0][0]和[0][1]元素即为原数组的行列数
int[][] a3 = new int[(a2[0][0])][(a2[0][1])];
for (int i=1; i<a2.length; i++){
a3[(a2[i][0])][(a2[i][1])] = a2[i][2];
}
array(a3);
}
//输出数组元素
public static void array(int[][] a){
for (int i=0; i<a.length; i++){
for (int j=0; j<a.length; j++){
System.out.print(a[i][j] + "\t");
}
System.out.println();
}
}
}
标签:java,int,实践,System,零到,数组,println,public,out 来源: https://blog.csdn.net/qq_44080263/article/details/122516517