首页 > 编程语言 >Java - 7 数组

Java - 7 数组

时间:2024-10-06 15:46:46浏览次数:1  
标签:arr Java 数组 int arr1 new public

Java - 7 数组

数组

存放多个 同一类型的数据,引用数据类型,本质是对象

double[] ds = {3, 5, 2.3};

for(int i = 0; i < 3; i++){
    System.out.println("第" + (i+1) + "个元素的值=" + ds[i]);
}

数组的使用

动态初始化

double[] scores = new double[5]; // 可以存放5个double,没有赋值时都是0(布尔类型就是false)
String[] strs = new String[]{"a","b"};
// 先声明,没有分配内存空间
int[] a;
// 分配内存空间
a = new int[5];

静态初始化

double[] ds = {3, 5, 2.3};

数组长度

char[] chars = new char[26];
chars.length // 26

数组赋值机制

基本数据类型赋值,值传递,赋值方式为拷贝

数组在默认情况下是引用传递,传递的是地址

int[] arr1 = {1, 2, 3};
int[] arr2 = arr1; // arr2的变化会影响arr1

数组拷贝

int[] arr1 = {1, 2, 3};
int[] arr2 = new int[arr1.length];
for(int i = 0; i<arr1.length; i++){
	arr2[i] = arr1[i];
}

数组反转

找规律反转

public class Reverse {
	public static void main(String[] args) {
		int[] arr = {11,22,33,44,55,66,77};
		for(int i = 0; i<arr.length/2; i++){
            // 一头一尾交换
			int temp = arr[arr.length-1-i];
			arr[arr.length-1-i] = arr[i];
			arr[i] = temp;
		}
        // 输出
		for(int i = 0; i<arr.length; i++){
			System.out.println(arr[i]);
		}
	}	
}

逆序赋值

public class Reverse {
	public static void main(String[] args) {
		int[] arr1 = {11,22,33,44,55,66,77};
		int[] arr2 = new int[arr1.length];
		int count = 0;
        // 逆序拷贝元素到新数组
		for(int i = arr1.length-1; i>=0; i--){
			arr2[count] = arr1[i];
			count++;
		}
		arr1 = arr2; // *
        // 输出
		for(int i = 0; i<arr1.length; i++){
			System.out.println(arr1[i]);
		}
	}	
}

数组扩容

public class Add {
	public static void main(String[] args) {
		int[] arr = {11,22,33,44,55,66,77};
		int[] arrNew = new int[arr.length+1]; // 扩容
		// 拷贝
		for(int i = 0; i<arr.length; i++){
			arrNew[i] = arr[i];
		}
		arrNew[arrNew.length-1] = 4; //新元素
		arr = arrNew; // *
        // 输出
		for(int i = 0; i<arr.length; i++){
			System.out.println(arr[i]);
		}
	}	
}

用户判断要不要加

import java.util.Scanner;
public class AddUser {
	public static void main(String[] args) {
		int[] arr = {11,22,33,44,55,66,77};
		while(true){
			for(int i = 0; i<arr.length; i++){
				System.out.println(arr[i]);
			}
			System.out.println("Want add?");
			Scanner scanner = new Scanner(System.in);
			char c = scanner.next().charAt(0);
			if(c == 'Y'){
				int[] arrNew = new int[arr.length+1];
				for(int i = 0; i<arr.length; i++){
					arrNew[i] = arr[i];
				}
				int eleNew = scanner.nextInt();
				arrNew[arrNew.length-1] = eleNew;
				arr = arrNew;
			}else break;
		}
	}	
}

练习

在升序数组中插入一个数使数组还是升序

import java.util.Scanner;
public class Insert{
	public static void main(String[] args) {
		int[] arr = {10,12,45,90};
		Scanner scanner = new Scanner(System.in);
		while(true){
			System.out.println("text a number");
			int num = scanner.nextInt();;
			int[] arrNew = new int[arr.length+1]; // 扩容
			boolean flag = false; // num是否插入数组
			for(int i = 0, j = 0; i<arrNew.length; i++){
				if(flag){ // num插入了数组后面就直接拷贝
					arrNew[i] = arr[j];
					j++;
				}else if(i<arr.length){ // num不是最大
					if(num > arr[j]) {
                        arrNew[i] = arr[j];
                        j++;			
					}
					else { // 插入num
						arrNew[i] = num;
						flag = true;
					}
				}else arrNew[i] = num; // num是最大
			}
			arr = arrNew; // *
			System.out.println("-------");
            // 输出
			for(int i = 0; i<arr.length; i++){
				System.out.println(arr[i]);
			}
		}
	}
}
public class Insert{
	public static void main(String[] args) {
		int[] arr = {10,12,45,90};
		int insertNum = 22;
		int index = -1; // 下标
		// 确定插入下标
		for(int i = 0; i<arr.length; i++){
			if(insertNum<=arr[i]){
				index = i;
				break;
			}
		}
		if(index == -1) index = arr.length; // insertNum最大

		int[] arrNew = new int[arr.length+1]; //扩容
		for(int i = 0, j = 0; i<arrNew.length; i++){
			if(i != index){
				arrNew[i] = arr[j];
				j++;
			}else arrNew[i] = insertNum;
		}
		arr = arrNew;
		// 输出
		for(int i = 0; i<arr.length; i++){
			System.out.println(arr[i]);
		}
	}
}

练习心得

  1. 两个不同长数组循环要考虑,不长过一个数组的长度是否也不超过另一个数组的长度

  2. 写逻辑运算时想想不成立和成立分别有哪些情况

标签:arr,Java,数组,int,arr1,new,public
From: https://www.cnblogs.com/wxrwajiez/p/18449098

相关文章

  • Java - 10 二维数据
    Java-10二维数据一维数组的每个元素又是一个一维数组静态初始化int[][]arr={{0,0,0,0},{1,1,1,1},{2,2,2,2},{3,3,3,3}};publicclassTwoDimensionArray{ publicstaticvoidmain(String[]args){ int[][]arr......
  • Java - 11 类与对象
    Java-11类与对象类类[属性,行为]->对象[属性,行为]publicclassTest{ publicstaticvoidmain(String[]args){Catcat1=newCat();//创建对象cat1.name="大宝";cat1.age="3";cat1.color="orange";......
  • Java - 12 方法
    Java-12方法publicclassmain{ publicstaticvoidmain(String[]args){Personpers=newPerson();pers.speak();pers.cal(100);intreturnRes=pers.getSum(2,3); }}classPerson{Stringname;intage;......
  • Java - 14 方法重载
    Java-14方法重载+可变参数方法重载Java允许同一个类中,多个同名方法存在,但要求形参列表不一致(类型,顺序),返回类型没有要求publicclassOverload{ publicstaticvoidmain(String[]args){ MyCalculatorm=newMyCalculator(); System.out.println(m.calculate(1,2));......
  • Java - 13 方法的递归
    Java-13方法的递归递归必须向退出递归的条件逼近斐波那契数列当n=1,1当n=2,1当n>=3,是前两个数的和publicclassRecursion{ publicstaticvoidmain(String[]args){ Fbnqf=newFbnq(); intn=7; intres=f.num(n); if(res!=-1) System.out.p......
  • Java - 15 作用域
    Java-15作用域classCat{ intage=1;//全局变量(属性),作用域是整个cat类{intnum=100;//代码块中-局部变量}publicvoidsay(){ Stringgreet="hello";//局部变量(除了属性之外就是局部变量),只能在say方法中使用System.out.p......
  • Java - 3 运算符
    Java-3运算符算术运算符/*++a:先运算后取值a++:先取值后运算*/inti=1;i=i++;//(1)temp=i;(2)i=i+1;(3)i=temp;System.out.println(i);//1inti=1;i=++i;//(1)i=i+1;(2)temp=i;(3)i=temp;System.out.println(i);//2System.out.prin......
  • Java - 5 原码、反码、补码
    Java-5原码、反码、补码0表示正,1表示负整数的原码,反码,补码都一样负数的反码=原码符号位不变,其它位取反负数的补码=反码+10的反码,补码都是0Java中没有无符号数计算机运算时,以补码的方式运算看计算结果时,要看原码整数数据类型取值范围数据类型范围byt......
  • Java内存模型
    1.硬件的效率与一致性物理机遇到的并发问题与虚拟机中的情况有很多相似之处,物理机对并发的处理方案对虚拟机的实现也有相当大的参考意义。“让计算机并发执行若干个运算任务”与“更充分地利用计算机处理器的效能”之间的因果关系,看起来理所当然,实际上它们之间的关系并没有想象......
  • java性能调优记录
    五、设计模式调优单例模式最简单的单例模式及问题分析//懒汉模式publicfinalclassSingleton{privatestaticSingletoninstance=null;//不实例化privateSingleton(){if(instance!=null){thrownewRuntimeException("UsegetInstance()methodtoge......