本文为博主辛苦总结,希望自己以后返回来看的时候理解更深刻,也希望可以起到帮助初学者的作用.

**转载请注明 出自 : luogg的博客园 ** 谢谢配合!

数组

数组是多个相同类型数据的组合

//1.定义数组

String [] name;

//2.静态初始化

name = new String []{"张三","李四","王五","赵六"};

//3.遍历数组

for(int i = 0;i < name.length;i++){

System.out.println(name[i]);

}

//1.定义一个动态数组

int [] score;

//2.动态初始化

score = new int[5];

score[0] = 87;

score[1] = 88;

score[2] = 89;

score[3] = 90;

//score[4] = 87;

//3.遍历数组

for(int i = 0;i < score.length;i++){

System.out.println(score[i]);

}

//数组的默认初始化值

//对于基本的数据类型,byte,short,int,long,float,double,boolean,char,

//1.对于byte,short,int,long而言,默认初始化是0

byte [] score = new byte [3];

score [0] = 3;

for(int i = 0 ; i < score.length ; i++){

System.out.println(score[i]);//3,0,0

}

//2.对于float,double而言,默认初始化是0.0

float [] f = new float[3];

f [0] = 1.3f;

for(int i = 0 ; i < f.length ; i++){

System.out.println(f[i]);//1.3,0.0,0.0

}

//3.对于boolean而言,默认初始化值是false

boolean [] b = new boolean [3];

b [0] = true;

for(int i = 0 ;i < b.length;i++){

System.out.println(b[i]);//true,false,fasle

}

//4.对于char 而言,默认初始化值是空格

char [] c = new char[3];

c [0] = 'a';

for(int i = 0;i < c.length;i++){

System.out.println(c[i]);//a, , ,

}

//4.对于引用数据类型,默认初始化值为null,数组也是‘引用数据类型,以Stirng为例

String [] str = new String [3] ;

str [0] = "旺财";

str [1] = "小强";

for(int i = 0 ; i < str.length ; i++){

System.out.println(str[i]);//旺财,小强,null

}

/*

* 从键盘输入学生成绩,找出最高分,并输出学生成绩等级。

* 成绩 >= 最高分-10 等级为A

* 成绩 >= 最高分-20 等级为B

* 成绩>= 最高分-30 等级为C

* 其余 等级为D

*

*/

public class t04_StudentScore {

public static void main (String [] args){

//1.创建一个Scanner对象,并从键盘获取学生的个数。

Scanner s = new Scanner(System.in);

System.out.println("请输入学生个数: ");

int count = s.nextInt();//count 用来记录学生的个数

//2.创建一个长度和学生个数相同的int型数组。(动态数组)

int [] score = new int [count];

int maxScore = 0;

System.out.println("请输入学生成绩");

//3.从键盘一次获取学生的成绩,并赋值给数组元素。并获取学生中的最高分。

for(int i = 0 ; i < score.length; i++){

int scores = s.nextInt();

score[i] = scores;

if(score[i] > maxScore){

maxScore = score[i];

}

}

//4.遍历学生成绩的数组,并根据成绩与最高分的差值,赋予相应的等级,并输出。

System.out.println("最高分为:" + maxScore);

char level;

for(int i = 0 ; i < score.length; i++){

if(score[i] >= maxScore - 10){

level = 'A';

}else if(score[i] >= maxScore - 20){

level = 'B';

}else if(score[i] >= maxScore - 30){

level = 'C';

}else{

level = 'D';

}

System.out.println("student:" + i + " score:"+score[i]+" level:"+level);

}

s.close();

}

}

内存中动态初始化数组的步骤

某数组:

int [ ] score = new int [4];

score[0]=89;

score[3]=90;

首先,栈中会先开辟一个score的空间,然后堆中生成一个带有16进制地址值长度为4的数组,然后将这个地址值传递给栈中的score,最后score将他的值score[0]和score[3]传给堆中的数组中。

只要new出来的,都在堆空间。

数组长度一旦初始化,其长度不可以改变。

//二维数组的静态初始化和遍历

//int [][] i = new int[][]{{1,2,3},{3,4,5},{6}};

int [][] i;

i = new int[][]{{1,2,3},{3,4,5},{6}};

for(int m = 0 ; m < i.length; m++){//行

for(int n = 0; n < i.length; n++){//列

System.out.print(i[m][n]+" ");

}

System.out.println();

}

//获取二维数组的长度

System.out.println(i.length);//3

//获取二维数组元素的长度

System.out.println(i[0].length);//3

//二位数组的动态初始化

String [][] name;

name = new String[5][4];//动态初始化方法一

name = new String[5][];//动态初始化方法二

name[0] =new String[6];

name[1] =new String[3];

name[2] =new String[4];

name[3] =new String[2];

name[4] =new String[5];

name[0][3] = "哈哈";

/*错误的初始化方式

name = new String[][];

name = new String[][5];

*/

}

常见的数组异常

数组下标越界异常:java.lang.ArrayIndexOutOfBoundsException

空指针异常(栈空间空指针,堆空间空指针)

//数组下标越界异常:java.lang.ArrayIndexOutOfBoundsException

/*int[] i = new int [5];

i[10] = 10;

System.out.println(i);*/

//2.空指针异常: java.lang.NullPointerException

/*boolean [] b = new boolean[3];

b=null;//栈空间中的空指针异常

System.out.println(b[0]);*/

//堆空间中的空指针异常

String [] s = new String[3];

System.out.println(s[0].toString());

//空值无法调用方法,不是实体

//二维数组堆空间中的空指针异常

int [][] i = new int [3][];

i[3][0] = 2;

//因为new的int[3][]中本身就是3个null的对象,无法给i[3][0]传值

杨辉三角

/*

* 使用二维数组打印10行的杨辉三角(开始结束都为1,内部为上边的上边左边的和)

* 1

* 11

* 121

* 1331

* 14641

* 15101051

* ~~~

*/

public class t08_杨辉三角 {

public static void main(String[] args) {

// 1.创建数组

int[][] yangHui = new int[10][];

for (int i = 0; i < yangHui.length; i++) {

yangHui[i] = new int[i + 1];// 定义列的个数

}

for (int i = 0; i < yangHui.length; i++) {

for (int j = 0; j < yangHui[i].length; j++) {

yangHui[i][0] = yangHui[i][i] = 1;

if (i > 1 && j > 0 && j < i) {

yangHui[i][j] = yangHui[i - 1][j] + yangHui[i - 1][j-1];

}

}

}

for (int i = 0; i < yangHui.length; i++) {

for (int j = 0; j < yangHui[i].length; j++) {

System.out.print(yangHui[i][j] + "\t");

}

System.out.println();

}

}

}

练习

//使用简单数组

//(1)创建一个名为TestArray的类,在main()方法中声明array1和array2两个变量,

//他们是int[]类型的数组。

//(2)使用大括号{},把array1初始化为8个素数:2,3,5,7,11,13,17,19。

//(3)显示array1的内容。

//(4)赋值array2变量等于array1,修改array2中的偶索引元素,

//使其等于索引值(如array[0]=0,array[2]=2)。打印出array1。

public class t10_两数组值转换 {

public static void main(String[] args) {

int[] array1,array2;

array1 = new int[]{2,3,5,7,11,13,17,19};

for (int i = 0; i < array1.length; i++) {

System.out.print(array1[i]+" ");

}

System.out.println();

array2 = array1;

for (int i = 0; i < array2.length; i++) {

if(i%2==0){

array2[i] = i;

}

System.out.print(array2[i]+" ");

}

System.out.println();

//将array1的值赋给array2,修改array2之后打印array1,发现也跟着改变了

//原因就是array1赋值给array2的是它的地址,修改array2的时候就是修改了array1.

for (int i = 0; i < array1.length; i++) {

System.out.print(array1[i]+" ");

}

}

}

array2 = array1 的内存图解

正确的数组复制方式:

int[] arr1 = new int[arr.length];

for(int i = 0 ; i < arr.length ; i++){

arr1[i] = arr[i];

System.out.print(arr1[i]+" ");

}

数组的常用算法

/*

1.求数组元素的最大值、最小值、平均数、总和等

2.数组的复制、反转

3.数组元素的排序

*/

public class t09_数组常用算法1 {

public static void main(String[] args) {

int[] arr = new int[]{2,43,23,55,75,-3,-99,100,75,-9};

//求最大值

int max = arr[0];

for(int i = 1 ; i < arr.length; i++){

if(max < arr[i]){

max = arr[i];

}

}

System.out.println("数组的最大值:" +max);

//求最小值

int min = arr[0];

for(int i = 1 ; i < arr.length; i++){

if(min > arr[i]){

min = arr[i];

}

}

System.out.println("数组的最小值为:" +min);

//求和

int sum = 0;

for(int i = 0 ; i < arr.length ; i++){

sum += arr[i];

}

System.out.println("数组的和为:" +sum);

//求平均值

int avg;

avg = sum / arr.length;

System.out.println("数组的平均值为:" +avg);

//数组的复制

int[] arr1 = new int[arr.length];

for(int i = 0 ; i < arr.length ; i++){

arr1[i] = arr[i];

System.out.print(arr1[i]+" ");

}

System.out.println();

//数组元素的反转

//for (int i = 0; i < arr.length/2; i++) {

//int temp = arr[i];

//arr[i] = arr[arr.length - 1 - i];

//arr[arr.length - 1 - i] = temp;

//}

//数组元素反转方法二:

for(int x = 0 , y = arr.length - 1 ; x < y ; x++ , y--){

int temp = arr[x];

arr[x] = arr[y];

arr[y] = temp;

}

for (int i = 0; i < arr.length; i++) {

System.out.print(arr[i]+" ");

}

}

}

输出结果:

冒泡排序和直接选择排序

/*

冒泡排序的思想:(从小到大)

相邻两个元素比较,前边比后边大,那么就前后交换位置,一直比到最后一个。

每完成一次循环就将最大元素排在最后(如从小到大排序),

下一次循环是将其它的数进行类似操作。

*/

public class t11_冒泡排序 {

public static void main(String[] args) {

int[] arr = new int[]{2,43,23,55,75,-3,-99,100,75,-9};

System.out.println("冒泡排序之前:");

for (int i = 0; i < arr.length; i++) {

System.out.print(arr[i]+" ");

}

//使用冒泡排序将数组元素从小到大排序

//外层控制轮数,内层比较相邻元素大小

for(int i = 0 ; i < arr.length-1 ; i++){//有n个数,循环n-1次

for(int j = 0 ; j < arr.length - 1 - i ; j++){//循环到数组长度-1-i终止

if(arr[j] > arr[j + 1]){

int temp = arr[j];

arr[j] = arr[j + 1];

arr[j + 1] = temp;

}

}

}

System.out.println();

System.out.println("冒泡排序之后:");

for (int i = 0; i < arr.length; i++) {

System.out.print(arr[i]+" ");

}

}

}

/*

* 直接选择排序就是先用第一个元素和下一个比,下一个比他小,则交换,再和下下一个比一直到最后。

* 然后用第二个和下一个比,以此类推。

*/

public class t12_直接选择排序 {

public static void main(String[] args) {

int[] arr = new int[]{2,43,23,55,75,-3,-99,100,75,-9};

//使用直接排序将元素从小到大排序

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 = arr[i];

arr[i] = arr[j];

arr[j] = temp;

}

}

}

//遍历元素

for (int i = 0; i < arr.length; i++) {

System.out.print(arr[i]+" ");

}

}

}

ogg for java_luogg_java学习_04_数组相关推荐

  1. c语言中void arrout,c语言学习笔记(数组、函数

    <c语言学习笔记(数组.函数>由会员分享,可在线阅读,更多相关<c语言学习笔记(数组.函数(53页珍藏版)>请在人人文库网上搜索. 1.数组2010-3-29 22:40一维数 ...

  2. [ 转载 ] Java基础12--基础学习总结——数组

    java基础学习总结--数组 一.数组的基本概念 数组可以看成是多个相同类型数据组合,对这些数据的统一管理. 数组变量属引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量. 数组的 ...

  3. python类的数组属性_Python学习之数组类型一:

    Python学习之数组类型一: Numpy中的向量与矩阵: 1.创建: 向量.矩阵均由array函数创建,区别在于向量是v=array( [逗号分隔的元素] ), 矩阵是M=array( [[ ]] ...

  4. 【PHP学习】—数组的定义和遍历(三)

    [PHP学习]-数组的定义和遍历(三) 一.常见的数组定义方式 二.遍历数组 三.二维数组 四.数组传递给页面 数组转json格式(一维数组) 五.数组传递给页面 数组转json格式(二维数组)

  5. java数组元素的排序_java学习之数组元素排序,冒泡排序和选择排序

    java学习之数组元素排序 选择排序 *返回值类型 void *参数列表 int[] arr * 分析:选择排序 * 第一次arr[0]与arr[1-4]比较,总共比较4次 * 第二次arr[1]与a ...

  6. Go语言学习笔记-数组、切片、map

    Go语言学习笔记-数组.切片.map 数组:同一数据类型元素的集合.是值类型,长度固定无法修改 声明格式:var 数组名字 [元素数量] 数据类型 var arr [3] int //声明定义了一个长 ...

  7. 学习-Java数组之foreach遍历数组之正负数数量统计

    第1关:学习-Java数组之foreach遍历数组之正负数数量统计 任务描述 相关知识 foreach 语句 编程要求 测试说明 任务描述 本关任务:使用 foreach 语句统计数组中正负数的个数. ...

  8. Java 学习笔记 - 数组类型互转

    Java 学习笔记 - 数组类型互转 数组类型转换 字符串数组 to (Integer.Long.Double)列表 传统方式 Java8 Stream方式 数组 to 数组 字符串数组 to (in ...

  9. java学习之数组(二)

    学编程吧java数组学习(二)发布了,欢迎大家通过xuebiancheng8.com来访问. 下面接着来分析数组,前面分析了什么是数组,为什么要用数组,下面来分析下如何使用数组 数组和其他数据类型一样 ...

最新文章

  1. 使用 word 在 oschina 上写博客
  2. 2020 年 Node.js 开发者调查报告
  3. python enumerate函数用法
  4. 统计百度网盘文件个数 V3
  5. 《单线程的build hash table、write rows to chunks、hash join的步骤以及流程图》
  6. 程序员的十层楼(11层)
  7. 网易云免费OSS服务用做Markdown图床或博客图片外链
  8. 流量少怎么办?先考虑下面四项
  9. python里w_python vs pythonw | 学步园
  10. 红外线相关的论文(可见光和红外图像融合、红外图像增强、红外图像目标检测、红外图像分割...)
  11. 杨东援:交通管控,从智能走向智慧
  12. ignite配置文件编写
  13. php域名转向,php强制用户转向www域名的方法_PHP
  14. 洛谷P2057 善意的投票
  15. 50个汉字对应到 varchar是多少
  16. Java实现将文件(图片)上传到七牛云对象存储,并实现下载和删除功能
  17. 日本亚马逊海淘经验-2015
  18. Verilog HDL可综合描述(高质量Verilog书写)
  19. 写给迷茫期产品经理的一封信
  20. python中import as的浅显理解

热门文章

  1. OpenCV学习笔记总结
  2. PyTorch学习笔记(六):PyTorch进阶训练技巧
  3. 数据分析与数据挖掘的区别
  4. 大数据架构由哪些模块组成
  5. 大数据技术应用需注意哪些问题
  6. linux 设备驱动阻塞,深入浅出:Linux设备驱动中的阻塞和非阻塞I/O
  7. 荔枝hsv空间图像分割程序matlab,基于稀疏场水平集的荔枝图像分割算法_毛亮
  8. AcWing 801. 二进制中1的个数
  9. caffe镜像︱window10+docker+ubuntu14.04+caffe镜像的简单尝试
  10. R+大地图时代︱ leaflet/leafletCN 动态、交互式绘制地图(遍地代码图)