数组扩容、排序、嵌套语句应用

自己创建一个升序的数组,要求插入一个元素,该数组仍是升序。

思路
1、此题需要自己从键盘输入一个数组
2、先输入数组的长度,再定义该长度的数组,最后输入
3、输入后用之前学的冒泡排序给数组排序
4、排序后用do{}while(true);结构来互动是否需要继续添加元素
5、添加元素则用到数组的扩容
6、扩容的思路:
= = 6.1申请新数组,并且容量是之前数组的容量+1
= = 6.2把之前的数组数据赋值给新数组
= = 6.3把需要添加的数据放在数组的结尾
= = 6.4把新数组的地址指向原来的数组(arr = arrNew)注意顺序不要搞反
7、扩容后可以重新排列,也可以与数组中的元素比较,然后交换位置(此处两种方法都有,各有利弊)重新排列算法复杂度较高,交换位置则需要考虑三种情况:插入的数最小、一般、最大…
8、输出

代码如下

import java.util.Scanner;
public class ArrayH01{
	public static void main(String[] args) {
		Scanner myScanner = new Scanner(System.in);
		

	
		System.out.println("请输入数组的长度");
		int len = myScanner.nextInt();//接收数组长度
		int[] arr = new int[len];
		int temp ;
		System.out.println("请给数组输入值");//接受键盘输入的值
		for( int i = 0 ; i < len ; i++){
			arr[i] = myScanner.nextInt();
		}
		for (int i = 0 ; i < len-1  ;i++ ) {//用冒泡排序

			for (int j = 0 ; j < len - 1 - i  ;j++ ) {
			if(arr[j] >= arr[j+1]){
				   temp = arr[j];
				 arr[j] = arr[j+1];
				arr[j+1] = temp;
			}
			
		}
		}
		System.out.print("数组排序后的值为:");
		for(int i = 0 ; i < len ; i++){
			//输出排序好的数组序列
		System.out.print(arr[i]+" ");
 	}

 		do{
 		System.out.print("是否需要插入元素?");
 		String ans = myScanner.next();
 		if(  "是".equals(ans)  ){   //判断键盘输入的值,如果输入"是",则插入
 									//否则跳出循环
 			int[] arrNew = new int[arr.length+1];
 			System.out.println("请输入要插入的元素值:");
 	//有两种方法
 	//一、此方法为插入比较	:	
				int flagNew = -1;
 				int numNew = myScanner.nextInt();

			    for( int i = 0 ; i < arr.length ; i++){
			    	if((i == 0) && numNew <= arr[0]){//判断是否为最小元素,若是则插最前面
			    		flagNew = 0;
			    	}
			    	else if( (i == arr.length - 1) && numNew >= arr[arr.length-1] ){
			    		flagNew = arr.length;//判断是否为最大元素,若是则插 最后面
			    	}
					else if(numNew >= arr[i] && numNew <= arr[i+1] ){
					flagNew = i+1;//一般的在中间的情况
				}//判断添加的数在哪个位置
			  }
			  	//找到位置后赋值
			  arrNew[flagNew] =  numNew;
			  //再把 前面 那部分的值复制过来
			  for( int j = 0 ; j < flagNew ; j ++){
					arrNew[j] = arr[j];
			  }
			  //再把 后面 那部分的值复制过来
			  for( int k = flagNew + 1 ; k < arrNew.length ;k++ ){
					arrNew[k] = arr[k-1];
			  }
			  arr = arrNew;
			  //实现扩容


//二、此方法为重新排序:
//  			for(int k = 0 ;k < arr.length ;k++){
//  					arrNew[k] = arr[k];//给新数组赋值
//  			}
//  			arrNew[len] =  myScanner.nextInt();//新加的值放在最后

//  			arr = arrNew;//把扩容后的新数组 指向原来数组的地址,
//  						 //这样原来的数组也就实现了扩容,注意顺序不要搞反
//  			for (int i = 0 ; i < arr.length-1  ;i++ ) {
//  					//重新用冒泡排序
// 			for (int j = 0 ; j < arr.length - 1 - i  ;j++ ) {
// 			if(arr[j] >= arr[j+1]){
// 				   temp = arr[j];
// 				 arr[j] = arr[j+1];
// 				arr[j+1] = temp;
// 			}
			
// 		}
// }

 			System.out.println("数组最新元素为:");
 			for( int i = 0 ; i < arr.length ;i++){
 				System.out.println(arr[i]);
 			}

 		}else
 		{
 			System.out.println("退出添加");
 			break;
 		}

 	}while(true);

	}

}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值