首页 > 编程语言 >【Java笔记7】随机数生成,数组,for-each

【Java笔记7】随机数生成,数组,for-each

时间:2023-03-15 15:11:21浏览次数:62  
标签:arr Java 随机数 int 元素 实例 数组 each 下标

@

目录

一. 生成随机数:

import java.util.Random;

Random ran = new Random();
int genericNum = ran.nextInt(101); //生成的随机数对于101取余,随机数控制在1~100之间

二. 数组

在Java中,数组本身也是一种引用数据类型,数组中更可以保存多个值。与变量的区别是,变量在内存中开辟一个空间,只能存一个值,而数组则开辟多个空间,可以存放多个值,这些值既可以是基本数据类型的值,也可以是引用数据类型的值,这些空间,我们称之为“元素”,而找到一个元素的位置的编号,称之为“下标”。

1. 定义一个数组

(1)数组的定义

  1. 数据类型[] 变量名; 这种方式在Java开发中是非常推荐的。
  2. 数据类型 变量名[];这样的声明格式,是从C/C++借鉴过来的,也是方便C/C++开发人员可以快速上手Java。

(2)数组的实例化

数组的定义,相当于对于一个变量进行了声明,但是数组和变量有所不同,变量一旦声明了之后就可以直接进行使用,而数组要进行“实例化”,所谓实例化,就是在内存中开辟数组和其每个元素的存储空间。

  1. 数组变量名 = new 数据类型[元素个数]; 直接声明这个数组一共可以存储多少个值,即使还没有吧值放到数组元素中去。
  2. 数组变量名 = new 数据类型[]{值1,值2,值3}; 直接将值给到数组中,给多少值,数组就有多少元素。
  3. 数据类型[] 变量名 = {值1,值2,值3}这种实例化是在声明的时候实例化,他要求声明之后就进行实例化中间用等号连接。如果要让声明和实例化位于不同的行,请使用第二种实例化方法。

2. 数组中元素的表示方法

(1)使用数组元素下标

数组是多个值的集合,我们如果需要拿到数组中某一个值,就需要知道这个值保存在数组中的第几个位置,这个用来表示数据保存于数组中位置的编号,称为数组元素下标。

数组元素下标从0开始计数,即arr[0]表示数组arr中的第一个元素。

3. 数组的存储

我们去声明一个数组变量,计算机在内存中的栈区开辟一个存数组地址的空间,我们可以通过数组名来访问这块空间,如果我们不去初始化,则这块空间将不可用,所以如果不打算实例化,至少初始化为null

当我们实例化的时候,计算机在内存中的堆区开辟连续的满足需求的多块空间,然后将这多块连续空间的首地址保存于栈区的数组变量名对应的空间中去。

所以我们要使用一个数组中某个元素时,实际上是先通过数组名去访问栈区的某块空间拿到对应的堆区中连续多块空间的首地址,再根据数组元素下标偏移得到数组中这个元素在堆区中的地址,然后通过该地址得到这块内存中保存的数据。
数组的存储

4. 数组默认值

  1. 整数类型数组:元素默认值为 0
  2. 浮点类型数组:元素默认值为 0.0
  3. 引用类型数组:元素默认值为 null
  4. 字符类型数组:元素默认值为 ' '
  5. 布尔类型数组:元素默认值为 false

5. 多维数组

数组的每个元素又是一个数组,例如int[][] arr = new int[3][2]表示有三个元素,每个元素都是int[5]类型的一个数组。

那么要使用第二个数组中的第三个元素应该这样写:arr[1][2]

6. 常见错误:数组下标越界

数组下标越界
数组下标越界:当尝试对于一个数组中并不存在的位置进行赋值或者取值的时候,会导致的一种必然性的异常。比如int[] arr = new int[3]; 当使用arr[3]的时候就产生了数组下标越界。

如何解决:避免这样操作。

7. 数组有关方法

  1. 获取数组长度
    arr.length获取数组arr的长度。

三. 高级for循环

介绍一种常用于数组中的for循环:

语法:

for(int 临时变量 : 数组或者集合) {
	//循环体
}

功能:他会将数组中的每一个元素都拿出来赋值给临时变量,供循环体中的代码使用,数组有多少个元素,就循环几次。

示例:输出数组中每一个元素。

int[] arr = new int[]{1,2,3,4,5};
for(int i : arr) {
	System.out.println(i);
}

标签:arr,Java,随机数,int,元素,实例,数组,each,下标
From: https://www.cnblogs.com/fau152/p/17218621.html

相关文章

  • 某大厂面试题:说一说Java、Spring、Dubbo三者SPI机制的原理和区别
    大家好,我是三友~~今天来跟大家聊一聊Java、Spring、Dubbo三者SPI机制的原理和区别。其实我之前写过一篇类似的文章,但是这篇文章主要是剖析dubbo的SPI机制的源码,中间只是......
  • java 时间操作
    旧API   Date和Calendar  使用SimpleDateFormat格式化新API   LocalDateTime和ZonedDateTime  使用DateTimeFormatter格式化Datedate=new......
  • Java线程池和Spring异步处理高级篇
    开发过程中我们会遇到很多使用线程池的场景,例如异步短信通知,异步发邮件,异步记录操作日志,异步处理批量Excel解析。这些异步处理的场景我们都可以把它放在线程池中去完成,当然......
  • Java Math.random()函数
    Math.random() 函数返回一个浮点数,伪随机数在范围从0到小于1,也就是说,从0(包括0)往上,但是不包括1(排除1),然后您可以缩放到所需的范围。实现将初始种子选择到随机数生成算......
  • java protobuff, byte,字节数组等等转对象
     java中,字节数组转对象不外乎以下几种:1.使用原生的serilize进行序列化读写这个直接使用java内置的进行读写就行,但是不方便而且体积大冗余信息多。 2.使用第三方......
  • Java同步容器之stack源码分析
    一、概述Stack是栈。它的特性是:先进后出(FILO,FirstInLastOut)。java工具包中的Stack是继承于Vector(矢量队列)的,由于Vector是通过数组实现的,这就意味着,Stack也是通......
  • 关于java对接物联网设备自定义协议的安全性,以及长链接场景下需要注意的事项
    目前从事于物联网行业。共享充电宝。负责通讯相关。当前设备在线量约50W台。记录一下走得弯路。方便大家借鉴。文笔不太好,希望大家轻喷。本文主要是从以下几个方......
  • JAVA设备对接中,字节协议序列化的简单方式
    一般来说,java在和设备进行对接时都会使用私有协议或自定义协议,在序列化这些协议时会相当的繁琐,而且比较注重细节。 基于之前的对接经验,我整理并完成了一套序列化框架。......
  • 【Java工具】在代码头部加版权
    importjava.io.File;importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.RandomAccessFile;publicclassTest......
  • JAVA物联网私有协议,自定义协议开发
    在当代物联网行业中,由于隐私和安全问题,很多的公司选择使用自定义的私有二进制协议。在C语言中,由于有结构体的加持,对象和字节数组转换起来就特别简单;但在java中,在没有原生支......