java从入门到放弃06

这篇博客详细介绍了Java中一维数组的声明、初始化、元素访问、length属性使用及遍历方法。强调了数组长度不可变的特性,并给出了不同数据类型的默认值。文章通过多个案例分析了数组在内存中的表示,还涵盖了常见的算法应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数组

一。一维数组的声明和初始化
声明方式:

	String[] names;
	int age[];

静态初始化:初始化和赋值同时进行

	names = new String[]{"aa","cc"};
	//下面的声明和初始化不能分开进行
	String[] ps = {"aa","cc"};

动态初始化:初始化和赋值分开进行

	String[] ps = new String[3]; //3指的是数组的长度

注意:无论是静态初始化还是动态初始化数组一旦创建成功长度不可变。

二. 调用数组中的元素 : 通过索引值调用数组中的元素。索引值(下角标)是从0开始到(数组的长度-1)
int[] numbers = {1,2,3,4,5};

取值:

	int n = numbers[0];

赋值:

	numbers[0] = 100;

三. 数组的属性 – length(数组的长度)
String[] persons = {“小苍”,“小波”,“小饭”};

int len = persons.length;

四. 数组的遍历 : 根据数组的索引值进行遍历
String[] persons = {“小苍”,“小波”,“小饭”};

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

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

}
五. 数组元素的默认值
byte short int long -> 0
float double -> 0.0
char -> \u0000
boolean -> false
引用数据类型(数组,接口,类) -> null

案例1:

package com.atguigu.java;

/**
	数组 :相同数据类型的组合
	
	说明:
		1.数组是引用数据类型
		2.数组中的元素可以是基本数据类型也可以是引用数据类型。
 */
public class ArrayTest {

	public static void main(String[] args) {
		//1.数组的声明和初始化
		String[]  names;   //建议使用第一种声明类型
		int age[];
		//初始化
		//①静态初始化 :初始化和赋值同时进行
		names = new String[]{"小泽老师","小苍老师","小波老师","小泷老师"};
		//下面的方式:声明和初始化不能分开写
		int[] score  = {1,20,100,90};
		//②动态初始化 :初始化和赋值分开进行(先不放数据)
		age = new int[5];  //5指的是数组的长度(可以放几个元素)
		
		
		//2.获取数组中的元素:通过使用数组的下角标(索引值)来获取
		//下角标(索引值)是从0开始的到数组的长度 - 1
		//获取数组中的数据:
		String name = names[1]; //用name承接取出来的值
		System.out.println(name);
		//给数组中的元素赋值
		age[0] = 1000;
		System.out.println(age[0]);
		
		
		//3.数组的属性 :length - 数组的长度
		int len = age.length;
		System.out.println(len);
		System.out.println(names.length);
		
		
		//4.遍历数组中的所有元素
		for(int i = 0; i < names.length; i++){//0 ~  3
			System.out.println(names[i]);
		}
		
		System.out.println("---------------------------------------");
		
		//5.数组元素的默认值
		/*
		 * byte,short,int,long -> 0
		 * 
		 * float,double -> 0.0
		 * 
		 * char -> \u0000
		 * 
		 * boolean ->  false
		 * 
		 * 
		 * 引用数据类型 :null
		 * 
		 */
		byte[] b = new byte[2];
		System.out.println(b[0]);
		System.out.println(age[2]);
		boolean[] bs = new boolean[2];
		System.out.println(bs[0]);
		char[] cs = new char[2];
		System.out.println("ddd"+ cs[0] + "acc");
		String[] str = new String[2];
		System.out.println(str[0]);
		
	}
}

案例2:一维数组的内存解析

在这里插入图片描述

package com.atguigu.java;

/**
 * 一维数组的内存解析

 */
public class ArrayTest2 {

	public static void main(String[] args) {
		
		String[] names = new String[3];
		names[0] = "吴京";
		names[2] = "章子怡";
		
		String[] names2 = names;
		names2[1] = "志玲";
		
		names2 = new String[3];
		
		for(int i = 0; i < names.length; i++){
			System.out.println(names[i]);
		}
		
		System.out.println("-------------names2----------------");
		
		for(int i = 0; i < names2.length; i++){
			System.out.println(names2[i]);
		}
	}
}

练习1:

package com.atguigu.exer;

/**
	需求:创建一个char类型的26个元素的数组,分别 放置'A'-'Z‘。
	使用for循环访问所有元素并打印出来。
	提示:char类型数据运算 'A'+1 -> 'B','0'+1 -> ‘1‘

 */
public class ExerTest1 {
	public static void main(String[] args) {
		//创建一个数组
		char[] cs = new char[26];
		char c = 'A';
		//使用循环赋值
		for (int i = 0; i < cs.length; i++) {
			cs[i] = c;
			c += 1;
		}
		//遍历数组中的内容,输出
		for (int i = 0; i < cs.length; i++) {
			System.out.println(cs[i]);
		}
	}
}

练习2:

package com.atguigu.exer;

/*
 * 创建一个char类型的36个元素的数组,前26个元素放置'A'-'Z‘,后10个元素放置'0'-'9‘。
 */
public class ExerTest2 {

	public static void main(String[] args) {
		//思路和步骤如下:
		//1.创建数组
		char[] cs = new char[36];
		char c = 'A';
		char number = '0';
		//2.给数组赋值
		for (int i = 0; i < cs.length; i++) {
			if(i < 26){
				cs[i] = c;
				c += 1;
			}else{
				cs[i] = number;
				number += 1;
			}
		}
		
		//3.遍历数组,打印
		for (int i = 0; i < cs.length; i++) {
			System.out.println(cs[i]);
		}
		
	}
}

案例3:

package com.atguigu.exer;

import java.util.Scanner;

/*
 * 输入五名同学成绩,求出总成绩和平均成绩

	快捷键 :ctrl + 1
	
 */
public class ExerTest3 {

	public static void main(String[] args) {
		
		//创建数组用来存储成绩
		int[] scores = new int[5];
		//创建Scanner的对象用来读取键盘输入的数据
		Scanner scanner = new Scanner(System.in);
		//存储学生成绩
		for (int i = 0; i < scores.length; i++) {
			System.out.println("请输入学生的成绩");
			int score = scanner.nextInt();
			//把成绩放入到数组中
			scores[i] = score;
		}
		
		//输出学生的总成绩和平均成绩
		int sum = 0;
		for (int i = 0; i < scores.length; i++) {
			sum += scores[i];
		}
		System.out.println("总成绩:" + sum + " 平均成绩:" + sum / scores.length);
	}
}

案例4:

package com.atguigu.exer;

/*
 *  小明要去买一部手机,他询问了4家店的价格,分别是2800.5元,2900元,2750.0元和3100元,显示输出最低价

 */
public class ExerTest4 {

	public static void main(String[] args) {
		//存储所有人的价格
		double[] price = {2800.5,2900,2750.0,3100};
		
		double minPrice = price[0];//用来记录最低价格
		//循环遍历,寻找最小价格
		for (int i = 0; i < price.length; i++) {
			//取出数组中的每一个值
			double p = price[i];
			//比较价格
			if(minPrice > p){
				//记录比较后的低的价格
				minPrice = p;
			}
		}
		
		System.out.println("最低价格为 : " + minPrice);
	}
}

案例5:

package com.atguigu.exer;

import java.util.Scanner;

/*
 * 输入10个元素(10——99范围),保存到数组中,查找里面是否有>80,如果有,显示有,否则提示没有

 */
public class ExerTest5 {

	public static void main(String[] args) {
		//1.创建一个数组长度为10
		int[] numbers = new int[5];
		//2.读取数据 - 并将数据存放到数组中
		Scanner sc = new Scanner(System.in);
		for(int i = 0; i < numbers.length; i++){
			System.out.println("请输入一个数");
			/*
			int number = sc.nextInt();
			numbers[i] = number;
			*/
			numbers[i] = sc.nextInt();
		}
		//3.遍历数组-查找大于80的数据,如果有如果有,显示有,否则提示没有
		boolean boo = false; //true表示有大于80的,false则表示没有
		for (int i = 0; i < numbers.length; i++) {
			int num = numbers[i];
			if(num > 80){
				boo = true;
				break;
			}
		}
		
		//只要判断boo的值就可以推断出来是否有
		if(boo){
			System.out.println("有");
		}else{
			System.out.println("没有");
		}
	}
}

案例6:

package com.atguigu.exer;

import java.util.Scanner;

/*
 * 随机产生10个元素(10——99范围),保存到数组中,查找里面是否有>80,如果有,显示有,否则提示没有

 */

public class ExerTest6 {

	public static void main(String[] args) {
		/*
		//random()产生一个随机数 ,数值范围[0.0,1.0)
		for (int i = 0; i < 50; i++) {
			System.out.println((int)(Math.random() * 90) + 10);
		}
		*/
		//1.创建一个数组长度为10
		int[] numbers = new int[5];
		
		for(int i = 0; i < numbers.length; i++){
			System.out.println("请输入一个数");
			numbers[i] = (int)(Math.random() * 90 + 10);
		}
		//3.遍历数组-查找大于80的数据,如果有如果有,显示有,否则提示没有
		boolean boo = false; //true表示有大于80的,false则表示没有
		for (int i = 0; i < numbers.length; i++) {
			int num = numbers[i];
			if(num > 80){
				boo = true;
				break;
			}
		}
		
		//只要判断boo的值就可以推断出来是否有
		if(boo){
			System.out.println("有");
		}else{
			System.out.println("没有");
		}
	}
}

3.常见算法


package com.atguigu.java2;

import java.util.Arrays;

/*
 	数组中常见的算法:
 	
 	2. 求数值型数组中元素的最大值、最小值、平均数、总和等

	3. 数组的复制、反转、查找(线性查找、二分法查找(了解))
	
	4. 数组元素的排序算法

 */
public class ArrayAriTest {

	public static void main(String[] args) {
		int[] numbers = {10,20,6,5,3};
		
		//求数值型数组中元素的最大值
		int maxNumber = numbers[0];
		for (int i = 1; i < numbers.length; i++) {
			if(maxNumber < numbers[i]){
				maxNumber = numbers[i];
			}
		}
		System.out.println("最大值:" + maxNumber);
		
		//求数值型数组中元素的最小值
		int minNumber = numbers[0];
		for (int i = 1; i < numbers.length; i++) {
			if(minNumber > numbers[i]){
				minNumber = numbers[i];
			}
		}
		System.out.println("最小值:" + minNumber);
		
		//求数值型数组中元素的和 ,平均数
		int sum = 0;
		for (int i = 0; i < numbers.length; i++) {
			sum += numbers[i];
		}
		System.out.println("sum=" + sum + "  平均数:" + sum/numbers.length);
		
		//数组的复制
		int[] copyNumbers = new int[numbers.length];
		for (int i = 0; i < copyNumbers.length; i++) {
			copyNumbers[i] = numbers[i];
		}
		//输出数组中的元素
		copyNumbers[0] = 100;
		//思考 :如果修改了copyNumbers中的数据,numbers中的数据发生变化没? 没有
		String str = Arrays.toString(numbers);//Arrays是操作数组的一个工具类
		System.out.println("numbers=" + str);
		System.out.println("copyNumbers=" + Arrays.toString(copyNumbers));
	}
}
package com.atguigu.java2;

import java.util.Arrays;

/*
 	数组的反转、查找(线性查找、二分法查找(了解))
 */
public class ArrayAriTest2 {

	public static void main(String[] args) {
		int[] numbers = {10,20,6,5,3};
		//数组的反转 - 创建一个新的数组(倒序查找原来的数组,正序存放数组中的元素)
		int[] reverseNumbers = new int[numbers.length];
		//倒着遍历numbers
		for(int i = numbers.length - 1; i >=0; i--){
			reverseNumbers[numbers.length - 1 - i] = numbers[i];
		}
		//输出数组中的元素
//		System.out.println(Arrays.toString(reverseNumbers));
		
		System.out.println("---------------------------------------------------");
		
		//第二种方式
		for(int i = 0,j = numbers.length - 1; i < numbers.length / 2; i++,j--){
			//数据交换
			int temp = numbers[i];
			numbers[i] = numbers[j];
			numbers[j] = temp;
		}
		
		System.out.println(Arrays.toString(numbers));
	}
}


package com.atguigu.java2;

import java.util.Arrays;

/*
 	数组的反转、查找(线性查找、二分法查找(了解))
 */
public class ArrayAriTest2 {

	public static void main(String[] args) {
		int[] numbers = {10,20,6,5,3};
		//数组的反转 - 创建一个新的数组(倒序查找原来的数组,正序存放数组中的元素)
		int[] reverseNumbers = new int[numbers.length];
		//倒着遍历numbers
		for(int i = numbers.length - 1; i >=0; i--){
			reverseNumbers[numbers.length - 1 - i] = numbers[i];
		}
		//输出数组中的元素
//		System.out.println(Arrays.toString(reverseNumbers));
		
		System.out.println("---------------------------------------------------");
		
		//第二种方式
		for(int i = 0,j = numbers.length - 1; i < numbers.length / 2; i++,j--){
			//数据交换
			int temp = numbers[i];
			numbers[i] = numbers[j];
			numbers[j] = temp;
		}
		
		System.out.println(Arrays.toString(numbers));
	}
}
package com.atguigu.java2;

/*
 * 查找(线性查找、二分法查找(了解))
 */
public class ArrayAriTest3 {

	public static void main(String[] args) {
		
		int[] numbers = {10,20,6,5,3};
		
		//线性查找
		int findNumber = 20;//要查找的内容
		int index = -1;//用来记录查找到的数值的索引位置
		for (int i = 0; i < numbers.length; i++) {
			if(findNumber == numbers[i]){
				//如果查找到,记录下该索引的位置
				index = i;
				break;
			}
		}
		//判断是否查找到了
		if(index == -1){
			System.out.println("亲!!没有找到您想要的内容哦");
		}else{
			System.out.println("您的数据在" + index + "索引位置");
		}
	}
}
package com.atguigu.java2;

import java.util.Arrays;

/*
 * 有时间就看一下,没时间就算了 (了解)
 */
public class BinarySearch {

	public static void main(String[] args) {
		int[] number = { 12, 30, -5, 6, 9, 10, 5 };
		//排序
		Arrays.sort(number); // 必须排序好
	
		System.out.println(Arrays.toString(number));
		

		int findNumber = 12; // 要查找的内容
		int start = 0; //起始位置
		int end = number.length - 1; //结束的位置
		int index = -1; // 所在的元素位置
		while (start <= end) {
			int mid = (start + end) / 2;
			if (number[mid] == findNumber) {
				index = mid;
				break;
			} else if (number[mid] < findNumber) {
				start = mid + 1;
			} else {
				end = mid - 1;
			}
		}

		if (index == -1) {
			System.out.println("没有找到您需要的内容");
		} else {
			System.out.println("元素所在的位置" + index);
		}
		
	}
}
package com.atguigu.java2;

import java.util.Arrays;

/*
 * 有时间就看一下,没时间就算了 (了解)
 */
public class BinarySearch {

	public static void main(String[] args) {
		int[] number = { 12, 30, -5, 6, 9, 10, 5 };
		//排序
		Arrays.sort(number); // 必须排序好
	
		System.out.println(Arrays.toString(number));
		

		int findNumber = 12; // 要查找的内容
		int start = 0; //起始位置
		int end = number.length - 1; //结束的位置
		int index = -1; // 所在的元素位置
		while (start <= end) {
			int mid = (start + end) / 2;
			if (number[mid] == findNumber) {
				index = mid;
				break;
			} else if (number[mid] < findNumber) {
				start = mid + 1;
			} else {
				end = mid - 1;
			}
		}

		if (index == -1) {
			System.out.println("没有找到您需要的内容");
		} else {
			System.out.println("元素所在的位置" + index);
		}
		
	}
}
package com.atguigu.java2;

import java.util.Arrays;

/**
	冒泡排序
 */
public class BubbleSortTest {

	public static void main(String[] args) {
		int[] numbers = {10,20,6,5,3};
		
		//控制几轮 {0,1,2,3,4}
		for (int i = 0; i < numbers.length - 1; i++) {
			//控制每轮比较的次数 {第一轮的j的值 :0,1,2,3 }
			for (int j = 0; j < numbers.length - 1 - i; j++) {
				//判断是否需要交换
				if(numbers[j] > numbers[j + 1]){
					//数据交换
					int temp = numbers[j];
					numbers[j] = numbers[j + 1];
					numbers[j + 1] = temp;
				}
			}
		}
		
		//输出数组中的数据
		System.out.println(Arrays.toString(numbers));
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值