JAVA中的数组

Random引用数据类型

引用数据类型的使用方法

  1. 导入相关的开发包 import lang包可以不导入
  2. 创建引用数据类型的内容
    引用数据类型 变量名 = new 引用数据类型();
  3. 使用相关引用数据类型的功能

案例

猜数字小游戏

  1. 需要获取一个1-100的随机数—>Random
  2. 需要获取用户键盘输入的内容—>Scanner
  3. 根据生成的随机数和用户输入的数字来进行比较
  4. 如果随机数大于用户猜的数字提醒用户猜小了
  5. 如果随机数小于用户猜的数字提醒用户猜大了
  6. 如果相等就结束游戏
import java.util.Scanner;
import java.util.Random;

public class GuessNumGame{

	public static void main(String[] args){
		// 创建相关引用数据类型的内容
		// 获取用户输入的内容
		Scanner sc = new Scanner(System.in);
		// 获取一个随机数字 1 - 100
		Random r = new Random();
		int randomNum = r.nextInt(100) + 1;

		while(true){
			System.out.println("请输入一个1-100之间的数字");
			int guessNum = sc.nextInt();
			// 比较数字
			if (randomNum > guessNum){
				System.out.println("猜小了,请继续");
			}else if(randomNum < guessNum){
		  	  System.out.println("猜大了,请继续");

			}else{
				System.out.println("正确,游戏结束");
				break;
			}
		}
		
	}
}

数组

数组的概念

存放相同数据类型的一个容器,容器中的每一个内容称之为元素(变量)。

数组的使用

初始化数组–定义数组

格式1

数组类型[] 数组名;(int[] array;)

格式2

数据类型 数组名[];

创建数组

格式1:动态初始化

动态初始化在初始化时直接指定好数组的长度,系统会根据数组的长度自动给元素默认值
格式

  1. 数据类型[] 数组名 = new 数据类型[数组长度];
  2. 数据类型 数组名[] = new 数据类型[数组长度];
    注意:[]代表是一个数组 new开辟内存空间,默认输出数组,内容是数组的内存地址。
格式2:静态初始化

在初始化时指定好的数组的具体元素,然后系统会根据元素的个数来确定数组的长度。
格式
完全格式:数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3,…元素n,};
简便格式:数据类型[] 数组名 = {元素1,元素2,元素3,…元素n,};

访问数组元素

格式:数组名[n]; n:代表的是一个索引(下标),索引的范围是0到(数组长度-1)获取到的结果就是数组中的数组中的某一个元素(变量)

Java内存介绍

分为5大区域:栈、堆、方法区、本地方法区、寄存器
栈(stack):用于存放局部变量(在 if switch main等等{}中的变量)
堆(heap):凡是new出来的内部都存放在堆中。堆中会自动开辟内存空间,并且给变量赋默认值。

默认值:
基本数据类型:byte/short/int 是0 ,long是0L ,float 0.0F,double0.0 ,
char ‘\u0000’,boolean false。
引用数据类型:null

方法区:存储和.class相关的信息
本地方法区:执行本地方法,和开发无关,和操作系统相关。
寄存器:和CPU相关,性能极高。

数组的常见问题

数组使用的常见问题–>数组越界异常 ArrayIndexOutOfBoundsException
空指针异常:NullPointerException

数组的遍历

普通for循环遍历

for (int i=0;i<arr.length;i++){
	System.out.println(arr[i]);//i代表数组的索引
}

增强for循环遍历

增强for循环,只能用于查看元素,修改值是没有效果的

for (int i;arr){//i代表的是数组的元素
	i+=3;//在栈中修改i的值,并没有真正去堆中覆盖
	System.out.println("i="+i);//i代表数组的索引
}

数组案例

数组的最值

public class ArrayPractice01{

	public static void main(String[] args){

		int[] arr = {6,78,45,1,56,123};

		// 定义一个最大值的变量
		int max = arr[0];

		for (int i = 1;i < arr.length;i++){
			if (arr[i] > max){ // 123 >  78
				max = arr[i];// 123
			}
		}

		System.out.println("最大值是 : " + max);
	}
}

数组的反转

// 数组反转方式一:
public class ArrayPracticeReverse02{

	public static void main(String[] args){
		int[] arr = {1,2,3,4,5};
		int[] arr1 = new int[5];
		for (int i = 0;i  < arr.length;i++){
			arr1[i] = arr[arr.length - 1 - i];
		}
		 重新给原数组赋值
		arr = arr1;
		for (int i = 0;i < arr.length;i++){
			System.out.println(arr[i]);
		}
	}
}
// 数组反转方式二:
public class ArrayPracticeReverse02{
	public static void main(String[] args){
		int[] arr = {1,2,3,4,5};
		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 i = 0;i < arr.length;i++){
			System.out.println(arr[i]);
		}
	}
}
// 数组反转方式三:
public class ArrayPracticeReverse02{
	public static void main(String[] args){
		int[] arr = {1,2,3,4,5};
		for (int min = 0,max = arr.length - 1;min < max;min++,max--){
			// 交换数据
			int temp = arr[min];
			arr[min] = arr[max];
			arr[max] = temp;
		}
		for (int i = 0;i < arr.length;i++){
			System.out.println(arr[i]);
		}
	}
}

数组的查找

public class ArrayPractice03{

	public static void main(String[] args){
		//int[] arr = {3,5,7,8,9};
		 遍历查找数组元素

		 需要查找的数字
		//int num = 8;

		
		//for (int i = 0;i < arr.length;i++){
		//	// 判断元素和需要查找的数字是否相等
		//	if (num == arr[i]){//找到了
		//		System.out.println("需要查找的元素位置在" + i);
		//	}
		//}

		// 增强for循环寻找
		// 定义一个计数器
		//int count = 0;
		//for (int i : arr){
		//	if (i == num){
		//		break;
		//	}
		//	count++;// 记录索引
		//}
		//System.out.println(count);
		int[] arr = {3,5,7,8,9};
		// 遍历查找数组元素

		// 需要查找的数字
		int num = -1;
		// 最小的索引
		int min = 0;
		// 最大的索引
		int max = arr.length - 1;
		// 中间的索引
		int mid = (min + max) / 2;
		// 设定一个标记
		boolean flag = true;
		// 3 5 7 8 9
		while(arr[mid] != num){//没有找到
			if (arr[mid] > num){
				max = mid - 1;
			}

			if (arr[mid] < num){
				min = mid + 1;
			}
			// 重新计算新的中间值
			mid = (min + max) / 2;

			if (min > max){//表示没有找到数字
				System.out.println("查无此数!!!");
				flag = false;
				break;
			}
		}

		if (flag)
		System.out.println("查找数字的索引在" + mid);
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值