Java 基础 | 用户输入一组数,自动排序,可随意增加、减少数组元素,返回排序后的数组

import java.util.Scanner;
public class Homework{
	public static void main(String[] args){
		//1.先写一个固定元素的冒泡排序,从小到大的一维数组
		//(1)如int[] a = {13,51,10,9}
		//第一轮排序:最大的放到最后
		//  第一次排序:  13 51 10 9
		//  第二次排序: 13 10 51 9
		//  第三次排序: 13 10 9  51 第1轮 有arr.length - 1次排序  
		// 第二轮排序:...
		// 共需三轮排序 =>arr.length - 1 次
		//2.改为随用户输入的
		//(1)创建一个扫描器
		//(2)询问初始数组的元素个数
		//(3)遍历数组,每个元素都为输入
		//3.提示是否需要更改,需要则用户输入要添加的元素,并仍然是从小到大的(while break来实现)
		//(1)用一个String answer来接收回答的内容
		//(2)if else多分支运行
		Scanner myScanner = new Scanner(System.in);
		System.out.println("请输入数组元素的个数");
		int num = myScanner.nextInt();
		double[] arr = new double[num];
		for(int i = 0;i < num;i++){
			System.out.println("请输入数组第"+ (i + 1) +"个元素的值");
			arr[i] = myScanner.nextDouble();
		}
		for(int i = 0;i < num - 1;i++){//第i+1轮排序
			for(int j = 0;j < num - i - 1;j++){//第j+1次排序
				if(arr[j] > arr[j + 1]){//前一项比后一项大时替换
					double temp = arr[j + 1];
					arr[j+1] = arr[j];
					arr[j] = temp;
				}
			}
		}
		//遍历数组,输出排序后的结果
		System.out.print("\n排序后的结果为:\n");
		for(int i = 0;i < num;i++){
			System.out.print(arr[i] + " ");
		}

		while(true){
			System.out.println("\n数组内元素是否需要更改?请填写“增加”/“减少”/“不更改”");
			String answer = myScanner.next();
			if("增加".equals(answer)){//这里直接answer == "增加"不可,要用equals判断
				double[] increase = new double[arr.length + 1];
				System.out.println("输入增加的元素值:");
				double increaseNum = myScanner.nextDouble();
				//遍历arr的元素,如果比添加的元素小,就直接赋给increase对应的第几个元素
				//当arr[i]第一次等于或大于increaseNum时,记录索引,increaseNum赋给increase[i]跳出
				int index = 0;
				for(int i = 0; i < arr.length;i++){
					if(arr[i] < increaseNum){
						increase[i] = arr[i];
					}else{
						index = i;
						increase[i] = increaseNum;
						break;
					}
				}
				//接着循环
				for(; index < arr.length;index++){
					increase[index + 1] = arr[index]; 
				}

				//让arr也指向increase的地址,并循环输出
				arr = increase;
				System.out.println("增加后数组结果为:");
				for(int i = 0;i < arr.length;i++){
					System.out.print(arr[i] + " ");
				}					

			}else if("减少".equals(answer)){
				double[] decrease = new double[arr.length - 1];
				System.out.println("输入要删除的元素值:");
				double decreaseNum = myScanner.nextDouble();
				//考虑到可能有多个与输入值相同的元素,设置只删除第一个,用index来
				//如果没有与输入值相同的元素,输出提示,重新输入=>嵌套一个循环。
				while(true){
					int index = -1;
					for(int i = 0,j = 0;i < arr.length;i++){
						if(arr[i] == decreaseNum && index == -1){
							index = i;
							continue;
						}else{
							if(j < decrease.length){
								decrease[j] = arr[i];
							}
							j++;
						}
					}
					if(index == -1){
						System.out.println("当前数组内没有找到与" + decreaseNum + "匹配的值,请重新输入:");
						decreaseNum = myScanner.nextDouble();
					}else{
						arr = decrease;
						System.out.println("减少后数组结果为:");
						for(int i = 0;i < arr.length;i++){
							System.out.print(arr[i] + " ");
						}
						break;					
					}
				}

			}else if("不更改".equals(answer)){
				System.out.println("最终数组结果为");
				for(int i = 0;i < arr.length;i++){
					System.out.print(arr[i] + " ");
				}				
				break;
			}else{
				System.out.println("输入有误,请重新输入");
			}
		}
		
	}
}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值