A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© JAVA杭州10期 初级黑马   /  2017-12-27 21:48  /  1487 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

八天的JavaEE基础班的学习让我学到很多东西,Java的来源概述,第一次写出“HelloWorld”代码,变量常量的概念定义,数据类型的概念和分类,各种运算的类型,if语句,for循环语句,数组的概念和遍历,方法的定义和调用,面向对象…
这里我重点说下数组的内容,这部分的内容也是我最喜欢也是最头疼的地方。也是从这开始,让我感受到JavaEE的魅力所在。
Random的使用步骤
Random用于产生一个随机数,比如你想得到一个1-100之间的随机数,用不着自己去算,而Java可以为我们提供产生随机数的类,那就是Random.
其作用就是产生一个随机数。
使用步骤:
A.导包
import java.util.Random;
B.创建对象
Random r = new Random();
C.获取随机数
int number = r.nextInt(10);
这里产生的数据在0到10之间,包括0,不包括10。
括号里面的10也是可变的,如果是100,就是0-100之间的数据。
举例:让系统产生0-10之间的随机数
package com.itheima;
import java.util.Random;
public class RandomDemo {
publicstatic void main(String[] args) {
              Randomr = new Random();
         int number = r.nextInt(10);
         System.out.println(“number:”+number)
}
}
数组的概述
需求:现在需要统计某公司员工的工资情况,例如计算平均工资、找到最高工资等。假设该公司有80名员工,用前面所学的知识,程序首先需要声明80个变量来分别记住每位员工的工资,然后在进行操作,这样做会显得很麻烦。为了解决这种问题,Java就提供了数组供我们使用。
那么数组到底是什么呢?有什么特点呢?通过上面的分析:我们可以得到如下简单的说:
1.数组是存储多个变量(元素)的东西(容器)
2.这多个变量的数据类型要一致
数组的定义格式数组概念
数组是存储同一种数据类型多个元素的容器。
数组可以存储两种数据类型:
1.    基本数据类型:byte,short,int,long,float,double,char,Boolean.
2.    引用数据类型:String.   
数组的定义格式
格式1:数据类型[] 数组名;
格式2:数据类型 数组名[];
注意:这两种定义做完了,数组中是没有元素值的。                     
数组的初始化数组初始化概述:
Java中的数组必须先初始化,然后才能使用。而初始化就是为数组中的元素分配内存空间,并为每个数组元素赋值。
数组的初始化方式:动态初始化和静态初始化数组:存储同一种数据类型的多个元素的容器
定义格式:
A:数据类型[] 数组名;
B:数据类型数组名[];
举例:
A:int[]a; 定义一个int类型的数组,数组名是a
B:int a[]; 定义一个int类型的变量,变量名是a数组
数组初始化:
A:所谓初始化,就是为数组开辟内存空间,并为数组中的每个元素赋予初始值
B:我们有两种方式对数组进行初始化
a:动态初始化:只指定长度,由系统给出初始化值
b:静态初始化:给出初始化值,由系统决定长度
动态初始化:
数据类型[] 数组名 = new 数据类型[数组长度];
举例:int[] arr = new int[3];
静态初始化的格式:
数据类型[] 数组名 = new 数据类型[]{元素1,元素2,...};
简化格式:
数据类型[] 数组名 = {元素1,元素2,...};
举例:
int[] arr = new int[]{1,2,3};
简化后:
int[] arr = {1,2,3};
数组的内存分配JVM内存划分
Java 程序在运行时,需要在内存中的分配空间。为了提高运算效率,就对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。
栈:储局部变量
堆:储new出来的东西
方法区:(面向对象有说到)
一个数组的内存图
定义一个数组,输出数组名及元素。然后给数组中的元素赋值,再次输出数组名及元素
两个数组的内存图
定义两个数组,分别输出数组名及元素。然后分别给数组中的元素赋值,分别再次输出数组名及元素
两个数组指向同一个地址的内存图
对于内存图这块,我一直有种背的习惯,后来理解了后自然而然的也能说出来了。
数组的使用数组的元素访问
public class ArrayDemo {
  publicstatic void main(String[] args) {
         int[]arr = new int[3];
         System.out.println(arr);
System.out.println(arr[0]);
         System.out.println(arr[1]);
         System.out.println(arr[2]);
  }
}
数组使用的两个小问题
两个常见小问题:
A:java.lang.ArrayIndexOutOfBoundsException
1.数组越界异常
产生的原因:就是你访问了不存在的索引元素。
B:java.lang.NullPointerException
2.空指针异常
产生的原因:数组已经不指向堆内存的数据了,你还使用数组名去访问元素。
为什么我们要记住这样的小问题呢?
编程不仅仅是把代码写出来,还得在出现问题的时候能够快速的解决问题。
一维数组遍历
原始做法:
package com.itheima_03;
public class ArrayTest {
  publicstatic void main(String[] args) {
         int[]arr = { 11,22, 33, 44, 55 };
         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]);
  }
}
这里的索引长度只有5个,所以可以用原始的方法,但是如果是50,500个呢?这里就需要遍历来实现,省时省力。
package com.itheima_03;
public class ArrayTest {
  publicstatic void main(String[] args) {
for (int x = 0; x < 5; x++) {
                System.out.println(arr[x]);
         }
         for(int x=0; x<arr.length;x++) {
                System.out.println(arr[x]);
         }
  }
}
数组操作之获取最值:
   获取一个数组的最值,需要单独拿出其中的一个元素值假设其为最值,然后依次与其他元素值作对比,谁是最值就赋与谁。
举例:
package com.itheima_03;
public class ArrayTest2 {
  public static void main(String[] args) {
         int[] arr = {12,98,45,73,60};
         int max = arr[0];
               for(int x=1; x<arr.length;x++) {
                if(arr[x] > max) {
                       max= arr[x];
                }
         }
         System.out.println("数组中的最大值是:"+max);
  }
}
二维数组二维数组概述
简单的说:其实二维数组其实就是一个元素为一维数组的数组。
二维数组格式
定义格式
数据类型[][]数组名;
初始化方式
数据类型[][] 变量名 = {{元素…},{元素…},{元素…}};
package com.itheima_04;
public class ArrayArrayDemo {
  public static void main(String[] args) {
                       int[][] arr = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
         System.out.println(arr);              
System.out.println(arr.length);
         System.out.println(arr[0]);
         System.out.println(arr[0].length);
         System.out.println(arr[1]);
         System.out.println(arr[2]);
         System.out.println(arr[0][0]);
         System.out.println(arr[1][1]);
         System.out.println(arr[2][0]);
  }
}
二维数组的遍历
遍历思想:首先使用循环遍历出二维数组中存储的每个一维数组,然后针对每个遍历到的一维数组在使用循环遍历该一维数组中的元素
package com.itheima_04;
public class ArrayArrayTest {
  public static void main(String[] args) {
         int[][] arr = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
         for(int y=0; y<arr.length;y++) {
                for (int x = 0; x <arr[y].length; x++) {
                       System.out.print(arr[y][x]+ "  ");
                }
                System.out.println();
         }
  }
}
        二维数组这块需要一定的逻辑思维能力,我作为文科生拿这个真的无力,懂是能懂,但是需要多花时间去理解。一不小心直接掉进去出不来,心态会爆炸。不过,这几天的学习,我也慢慢适应了,学习计算机的语言,与其沟通,相爱相杀,我也相信只要用心了,总会有回报的,加油吧,码农们!

1 个回复

倒序浏览
能看出来,你有很用心在写这篇帖子呢!相信不管是随机数还是数组,对于现在的你来讲都应该了解很深刻了吧!不过你帖子上写了一句话,“方法区:(面向对象有说到)”,为什么不在这里将你对方法区的理解大致提一下呢?这样对你的学习更有帮助哦!好好加油,看好你
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马