java数组

目录

数组初始化

数组细节 

数组赋值机制 

数组翻转

数组扩容 

数组缩减

冒泡排序 

 顺序查找

二维数组 

二维数组动态初始化 

  杨辉三角 

练习巩固


数组初始化

(1)动态初始化1

  1.  数组的定义:数据类型 数组名[ ] = new 数据类型[ 大小 ] eg: int a[] = new int[5];
  2. 也可以写成:数据类型[ ] 数组名 = new 数据类型[ 大小 ]
  3. 数组的引用:数组名[下标/索引] 数组索引从0开始 
import java.util.*;
public class Array01{
	public static void main(String[] args){
		Scanner scanner = new Scanner(System.in);	
		//循环输入5个成绩,保存到double数组,并输出
		double scores[] = new double[5]; 
		for(int i = 0; i < scores.length; i++){
			System.out.println("请输入第" + (i+1) + "个成绩:");
			scores[i] = scanner.nextDouble();
		}
		System.out.println("=====================");
		for(int i = 0; i < scores.length; i++){
			System.out.println("第" + (i+1) + "个成绩:" + scores[i]);
		}
	}
}

 (2)动态初始化2

  1. 先声明数组,数据类型 数组名[ ]; 也可以写成:数据类型[ ] 数组名; eg: int a[];或int[] a;
  2. 再创建数组,数组名 = new 数据类型[大小]; eg: a = new int[10];

(3)静态初始化

数据类型 数组名[] = {元素值,元素值......}; 

eg: int a[] = {2,3,5,7,8}; 


数组细节 

  1. 数组是多个相同类型数据的组合
  2. 数组中的元素可以是任何数据类型 
  3. 数组创建后,如果没有赋值,有默认值int -> 0, short -> 0, byte -> 0, long -> 0, float -> 0.0, double -> 0.0, char -> \u0000, boolean false, String null
  4. 数组下标从0开始
  5. 数组下标必须在指定范围内使用,否则报:下标越界异常
  6. 数组属于引用类型,数组型数据是对象  
  7. 数组长度:数组名.length;

小练习-试试将大写26字母存储到数组中~

import java.util.*;
public class ArrayExercise01{
	public static void main(String[] args){
		Scanner scanner = new Scanner(System.in);	
		/*
		创建一个char类型的26个元素的数组,存储A-Z
		使用for循环访问所有元素并打印出来
		*/
		char letters[] = new char[26];
		for(int i = 0; i < 26; i++){
			letters[i] = (char)('A' + i); //注意'A'+i是int,需强制转换
		}
		for(int i = 0; i < letters.length; i++){
			System.out.print(letters[i] + " ");
		}
	}
}

练一练:求数组元素最大值

import java.util.*;
public class ArrayExercise02{
	public static void main(String[] args){
		Scanner scanner = new Scanner(System.in);	
		//求数组元素最大值
		int a[] = new int[100];
		System.out.print("请输入数组长度:");
		int n = scanner.nextInt();
		System.out.print("请依次输入数组元素:");
		for(int i = 0; i < n; i++){
			a[i] = scanner.nextInt();
		}
		int maxIndex = 0;
		for(int i = 1; i < n; i++){
			if(a[i] > a[maxIndex]){
				maxIndex = i;
			}
		}
		System.out.print("数组最大值为:" + a[maxIndex]);
	}
}

数组赋值机制 

  • 基本数据类型赋值,赋值方式为值拷贝
  • 引用数据类型赋值 ,赋的值是地址,赋值方式为引用赋值

数组翻转

import java.util.*;
public class ArrayReverse{
	public static void main(String[] args){
		Scanner scanner = new Scanner(System.in);	
		//元素输入
		int a[] = new int[100];
		System.out.print("请输入数组长度:");
		int n = scanner.nextInt();
		System.out.print("请依次输入数组元素:");
		for(int i = 0; i < n; i++){
			a[i] = scanner.nextInt();
		}
		System.out.println("翻转前的数组:");
		for(int i = 0; i < n; i++){
			System.out.print(a[i] + "\t");
		}
		
		//数组翻转
		for(int i = 0; i < n/2; i++){
			int temp = a[i];
			a[i] = a[n-i-1];
			a[n-i-1] = temp;
		}
		System.out.println("\n翻转后的数组:");
		for(int i = 0; i < n; i++){
			System.out.print(a[i] + "\t");
		}
	}
}

数组扩容 

编程实现动态给数组添加元素,要求:

  • 原始数组静态分配
  • 增加的元素y/n直接放在数组最后
  • 添加成功是否继续y/n
import java.util.*;
public class ArrayAdd{
	public static void main(String[] args){
		Scanner scanner = new Scanner(System.in);	
		int arr[] = {1,2,3};
		//数组扩容
		char answer = ' ';
		do{
			int newArr[] = new int[arr.length+1];
			for(int i = 0; i < arr.length; i++){
				newArr[i] = arr[i];
			}
			System.out.println("请输入你要添加的元素:");
			int t = scanner.nextInt();
			newArr[newArr.length-1] = t;
			arr = newArr;
			System.out.println("还要继续添加吗?");
			answer = scanner.next().charAt(0);
		}while(answer!='n');
		System.out.println("扩容后的数组:");
		for(int i = 0; i < arr.length; i++){
			System.out.print(arr[i] + "\t");
		}
	}
}

数组缩减

编程实现动态的给数组缩减元素,提示用户是否继续缩减,每次缩减最后那个元素,只剩下最后一个元素时,提示不能缩减。

import java.util.*;
public class ArrayReduce {
    public static void main(String []args) {
		Scanner scanner = new Scanner(System.in);
        int arr[] = {1, 2, 3, 4, 5};
		char answer = ' ';
		do{
		    int newArr[] = new int[arr.length - 1];
			for(int i = 0; i < arr.length - 1; i++){
				newArr[i] = arr[i];
		    }
			arr = newArr;
			System.out.println("缩减后的数组:");
			for(int i = 0; i < arr.length; i++){
			    System.out.print(arr[i] + "\t");
			}
			System.out.println("\n还要继续缩减元素吗?y/n");
			answer = scanner.next().charAt(0);
			if(arr.length==1){
				System.out.println("只剩一个元素,不能缩减了!");
				break;
			}
		}while(answer != 'n');
    }
}

冒泡排序 

  1. 对n个元素的数组进行冒泡排序
  2. 共进行(n-1)轮比较
  3. 每轮选出一个最大值,放到最后 
import java.util.*;
public class BubbleSort{
    public static void main(String []args) {
		Scanner scanner = new Scanner(System.in);
        int arr[] = {24,36,18,10,99,6};
		//从小到大冒泡排序
		for(int i = 0; i < arr.length-1; i++){
			for(int j = 0; j < arr.length-i-1; j++){
				if(arr[j] > arr[j+1]){
					int temp = arr[j];
					arr[j] = arr[j+1];
					arr[j+1] = temp;
				}
			}
		}
		for(int i = 0; i < arr.length; i++){
			System.out.print(arr[i] + "\t");			
		}
    }
}

 顺序查找

 有一个数列:{白眉鹰王,金毛狮王,紫衫龙王,青翼蝠王}; 从键盘中任意输入一个名称,判断数列中是否包含此名称;若找到了就提示找到,并给出下标值

import java.util.*;
public class SeqSearch{
    public static void main(String []args) {
		Scanner scanner = new Scanner(System.in);
		String names[] = {"白眉鹰王","金毛狮王","紫衫龙王","青翼蝠王"};
		System.out.println("请输入名字:");
		String findName = scanner.next();
		boolean flag = false;
		for(int i = 0; i < names.length; i++){
			if(findName.equals(names[i])){
				System.out.println("恭喜找到了,下标为:" + i);
				flag = true;
				break;
			}
		}
		if(!flag){
			System.out.println("sorry,没有找到~");			
		}
	}
}

二维数组 

  1. 二维数组可以看成一维数组的每个元素是一个一维数组
  2. 二维数组的创建
  3. 二维数组的元素个数:arr.length是二维数组的行数,即一维数组的个数
  4. 二维数组每个元素的长度:arr[i].length对应每个一维数组的长度

eg:二维数组静态初始化

int[][] arr = {{0,0,0,0},{0,0,1,1},{2,1,0,9}} 

二维数组动态初始化 

  1. int arr[][] = new int[2][3];
  2. 先声明,再开空间:int arr[][];  arr = new int[2][3];
  3. 列数不确定的动态初始化,先声明,再遍历分别给每个元素开空间:int arr[][] = new int[3][];

eg:

 创建如下二维数组:
        {{1},
        {2,2},
        {3,3,3}}

import java.util.*;
public class TwoDimensionArray{
    public static void main(String []args) {
		Scanner scanner = new Scanner(System.in);
		int arr[][] = new int[3][];
		for(int i = 0; i < arr.length; i++){
			arr[i] = new int[i+1];
			for(int j = 0; j < arr[i].length; j++){
				arr[i][j] = i+1;
			}
		}
		for(int i = 0; i < arr.length; i++){
			for(int j = 0; j < arr[i].length; j++){
				System.out.print(arr[i][j] + "\t");	
			}
			System.out.println();
		}
	}
}

  杨辉三角 

打印一个n行的杨辉三角,杨辉三角定义找小度 ~

下图为5行的杨辉三角

import java.util.*;
public class YangHui{
    public static void main(String []args) {
		Scanner scanner = new Scanner(System.in);
		//杨辉三角形
		System.out.println("请输入要打印的杨辉三角形行数:");
		int n = scanner.nextInt();
		int arr[][] = new int[n][];
		for(int i = 0; i < arr.length; i++){
			arr[i] = new int[i+1];
			for(int j = 0; j < arr[i].length; j++){
				if(j == 0 || j == i){
					arr[i][j] = 1;
				}else{
					arr[i][j] = arr[i-1][j-1] + arr[i-1][j];
				}
			}
		}
		for(int i = 0; i < arr.length; i++){
			for(int j = 0; j < arr[i].length; j++){
				System.out.print(arr[i][j] + "\t");	
			}
			System.out.println();
		}
	}
}

练习巩固

1.数组定义

answer: B, D

 2.

answer: blue

解析:boolean数组未赋值,默认为false,见本文数组细节

3.

answer: 1 3 5 7

4.对有序数组插入元素后,要求依然有序(数组扩容+定位)

import java.util.*;
public class Homework01{
    public static void main(String []args) {
		Scanner scanner = new Scanner(System.in);
		//对有序数组插入元素后,要求依然有序
		int arr[] = {10, 12, 45, 90};
		System.out.println("请输入要插入的数:");
		int num = scanner.nextInt();
		int newArr[] = new int[arr.length+1];

		for(int i = 0; i < arr.length; i++){
			if(num > arr[i]){
				newArr[i] = arr[i];
			}else{
				newArr[i] = num;
				newArr[i+1] = arr[i];
				for(int j = i+1; j < arr.length; j++){
					newArr[j+1] = arr[j];
				}
				break;
			}
		}
		arr = newArr;
		for(int i = 0; i < arr.length; i++){
			System.out.print(arr[i] + "\t");	
		}
	}
}

5.

import java.util.*;
public class Homework02{
    public static void main(String []args) {
		Scanner scanner = new Scanner(System.in);
		int arr[] = new int[10];
		double sum = 0;
		int maxIndex = 0;
		int minIndex = 0;
		boolean contain8 = false;
		System.out.println("随机数组:");
		for(int i = 0; i < arr.length; i++){
			arr[i] = (int)(Math.random()*100) + 1;
			System.out.print(arr[i] + " ");			
			sum += arr[i];
			if(arr[i] == 8){
				contain8 = true;
			}
		}
		System.out.println("\n倒序打印:");
		for(int i = arr.length-1; i >= 0; i--){
			System.out.print(arr[i] + " ");	
		}
		System.out.println();
		System.out.println("平均数:" + sum/10);
		for(int i = 1; i < arr.length; i++){
			if(arr[maxIndex] < arr[i]){
				maxIndex = i;
			}
			if(arr[minIndex] > arr[i]){
				minIndex = i;
			}
		}
		System.out.println("最大值:" + arr[maxIndex] + ",下标:" + maxIndex);
		System.out.println("最小值:" + arr[minIndex] + ",下标:" + minIndex);
		if(contain8){
			System.out.println("随机数组包含了8");
		}else{
			System.out.println("随机数组不包含8");
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lili_1i1i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值