Random、数组

文章介绍了如何在Java中生成随机数,包括Random类的使用和猜数字游戏的实现。接着,详细讲解了数组的概念,初始化方式(静态和动态),数组的访问、长度属性以及遍历方法。此外,还讨论了数组在内存中的存储机制和JVM的内存模型,如栈、堆和方法区的角色。
摘要由CSDN通过智能技术生成

一:Random

作用:产生一个随机数

实现流程:

Ⅰ:导包

Ⅱ:创建对象

Ⅲ:产生随机数

注意事项: 

创建的值用一个x变量来接收其中的10表示范围是从0-10(不包括10)要想随机数要从50-100之间的话可以这样写

(产生50-100之间的随机数,不包含100)

产生随机字符:

练习:猜数字游戏

思路:

1、创建一个随机数对象,产生一个1-100之间的随机数并用一个int类型的值接收: x

2、创建一个键盘输入对象,再初始化一个值y准备接收数据

3、第一次while循环使得y != x

  • 再将键盘输入的值赋值给y
  • 如果y > x,提示一下猜大了
  • 小于提示一下猜小了
  • 等于提示猜对了

4、循环内语句结束后在进行判断,不相等继续进去,相等退出循环

    public static void main(String[] args) {
        //创建计数器来记录猜的次数
        int count = 0;
        //创建一个随机数对象,产生1-100的随机数
        Random random = new Random();
        //用一个ine类型的值来接收
        int x = random.nextInt(100)+1;//随机产生的是0-99的数字,+1就是1-100
        //System.out.println(x);可以输出随机值看一下
        //创建键盘输入对象,用一个值来接收
        Scanner scanner = new Scanner(System.in);
        //先进行初始化,x尾1-100的值,所以y刚开始可以是-1也可以是0
        int y = -1;
        //判断x和y是否相等,不相等进去,相等结束
        while(y != x){
            //不相等再次输入
            y = scanner.nextInt();
            count++;
            //进行判断
            if(y > x){
                System.out.println("猜大了");
            }else if(y < x){
                System.out.println("猜小了");
            }else{
                System.out.println("猜对了");
            }
        }
        //成功后输出猜了多少次
        System.out.println(count);
    }

 二:数组

1、数组是什么,为什么要用数组

也是一个容器,变量是一个容器,只能存一个,数组可以存 多个(数组是一个可以存储多个相同类型数据的集合)

如果在大量数据的话,变量的创建太过繁琐,使用也麻烦,使用数组更为简介

2、初始化数组

Ⅰ:静态初始化

定义:在创建数组的时候就给数组赋值

两种格式:

格式1: 存储的数据的类型 [] 数组名 = new 存储的数据的类型[] {数据1,数据2,数据3}

格式2: 存储的数据的类型 [] 数组名 = {数据1,数据2,数据3}(常用)

 注意事项:

注意:只能存放同一类型数据

使用场景:适合一开始就知道要存入哪些元素值的业务场景。

总结:

第三个在数组的存储中解释

Ⅱ:动态初始化

定义:将数组长度固定,再往数组中赋值

格式:存储的数据的类型 [] 数组名 = new 存储的数据的类型[(长度)]

初始化各类型的默认值:

基本数据类型:

 byte、short、int、long      默认值为0
char的   默认值为'\u0000'(可以理解为是个空格,转化为整数是0) 
double、float         默认0.0
boolean    默认值为 false

引用数据类型:

类、接口、数组、String 默认是null

 

使用场景:适合开始不确定具体元素值,只知道元素个数的业务场景。

3、数组的访问

1、格式

数组名[下标]

 数组的第一位的值下标是0,下标从0开始。

2、数组的长度属性:length

格式:数组名.length

最后一个下标为 数组名.length - 1数组长度为length,但是下标从0开始的,所以最后一位的下标比长度小1,所以减一

注意事项:

数组下标超出数组或者等于数组长度,表示数组下标越界,会报异常

4、数组的遍历

1、定义:将数组中的元素都访问一遍

2、for循环

通过循环来控制下标,获得数组下标的值

3、foreach循环

格式for( 数据类型 变量名 :  数组名){  对数组值进行的操作  }

注意事项:

当使用 foreach 来迭代访问数组元素时,foreach 中的循环变量相当于一个临时变量,系统会把数组元素依次赋给这个临时变量,而这个临时变量并不是数组元素,它只是保存了数组元素的值。

5、数组在内存的存储

数组是引用数据类型,不会具体存储某个值,而是存储的这一串数据的地址

那么上面那个问题就是,数组是new对象来产生的,是一个引用类型,数组名存的是创建的对象的地址

数组名是局部变量是存在栈区的,数据是存在堆区的

那么数组是如何通过下标来获取值的呢?

在内存中,地址是连续的,数组也是连续存储的

假如数组的地址是0x6666(八进制),那么他后面的地址就是0x6667,以此类推,

再说一个int类型占四个字节,那么下一个值的地址就是0x6672(6666+4,逢8进1)

下标就是通过地址加上下标乘以这个数据类型的大小来获取数组中的值的

这一块是java运行后,再栈,堆上开辟的空间

jvm运行时注意的三块内存:

方法区:存储字节码文件(方法区中包含的都是在整个程序中永远唯一的元素,如class,static变量等静态属性〈①类的代码信息;②静态变量和方法;③常量池(字符串常量等,具有共享机制) )。 )


栈区:方法运行时所进入的内存,变量也是在这里(遵循后入先出原则)


堆区:new出来的对象大部分都放在堆区
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值