降序奇数和升序偶数

输入2N个不间断无序自然数,例如,5,3,6,1,4,2,在一行输出降序奇书和升序偶数,例如,5,3,1,2,4,6。
要求:
1、使用接口机制或抽象类。
2、声明保存2N个自然数、N个奇数和N个偶数的整形数组以及N,作为接口实现类或抽象类的子类的成员变量。
3、系统地生成getters和setters以及构造函数。
4、必须有输入数组、输出数组、数组排序、数组逆序以及从2N个数中分离出奇数和偶数等成员方法或抽象方法。

import java.util.Scanner;

abstract class A {
	public abstract void sort(int a[]);
 	public abstract void re_sort(int a[]);
 	public abstract void divide(int a[], int odd1[], int even1[]);
}

public class Sort extends A {
 	int n;
 	int array[], odd[], even[];

	//系统地生成getters、setters和构造函数
 	public Sort(int n, int[] array, int[] odd, int[] even) {
  		super();
  		this.n = n;
  		this.array = array;
  		this.odd = odd;
  		this.even = even;
 	}
 	public int getN() {
  		return n;
 	}
 	public void setN(int n) {
  		this.n = n;
 	}
 	public int[] getArray() {
  		return array;
 	}
 	public void setArray(int[] array) {
  		this.array = array;
 	}
 	public int[] getOdd() {
  		return odd;
 	}
 	public void setOdd(int[] odd) {
  		this.odd = odd;
 	}
 	public int[] getEven() {
  		return even;
 	}
 	public void setEven(int[] even) {
  		this.even = even;
 	}
 	//正序,冒泡排序
	@Override
 	public void sort(int[] a) {
  		boolean flag = true;
  		for (int i = 0 ; i<a.length-1 ; i++)
  		{
   			for(int j = 0 ; j<a.length-1-i ; j++)
         		{
    				if (a[j]>a[j+1])
             			{
     					int t = a[j];
                 			a[j] = a[j+1];
                 			a[j+1] = t;
                 			flag = false;
             			}
         		}
         		if (flag)	break;
     		}  
 	}
	//逆序,冒泡排序
	@Override
 	public void re_sort(int[] a) {
 		boolean flag = true;
 		for (int i = 0 ; i<a.length-1 ; i++)
 	 	{
   			for(int j = 0 ; j<a.length-1-i ; j++)
         		{
    				if (a[j]<a[j+1])
            			{
     					int t = a[j];
                 			a[j] = a[j+1];
                		 	a[j+1] = t;
                 			flag = false;
             			}
         		}
         		if (flag)	break;
     		} 
 	}
	//将数组,分为奇数组和偶数组
	@Override
 	public void divide(int a[], int odd1[], int even1[]) {
  		int j = 0, k = 0;
  		for(int i = 0; i < a.length; i++) {
   			if(a[i]%2 == 1) {
    				odd1[j] = a[i];
    				j++;
   			}
  	 		else {
    				even1[k] = a[i];
    				k++;
   			}  
  		} 
 	} 
	//输出数组
	public void outputArray(int[] a) {
 	 	for (int i : a)
            	System.out.print(i+" ");
 	}
	//输入数组
	public void inputArray() {
  		Scanner scanner = new Scanner(System.in); 
  		boolean flag;
  
  		System.out.println("请输入N的值:");
  		n = scanner.nextInt();
  		//分配空间
 		array = new int[2*n];
  		odd = new int[n];
  		even = new int[n];
  
 	 	System.out.println("请输入"+2*n+"个不间断无序自然数:");
  		do {
   			flag = false;
   			for(int i = 0; i < array.length; i++) {   
    				array[i] = scanner.nextInt();
   	 			if(array[i] < 0) {
     					System.out.println("输入有误!需全部重新输入:");
     					flag = true;
    				}     
   			}
  		}while(flag);
  		System.out.println("输入完成!");
 	}
	//主函数
	public static void main(String[] args) { 
  		Sort array = new Sort(0, null, null, null);
  
  		System.out.println("输入2N个不间断无序自然数,在一行输出降序奇书和升序偶数。");  
  		array.inputArray();
  		//分离奇数和偶数
  		array.divide(array.getArray(), 	array.getOdd(), array.getEven());
  		//排序
  		array.re_sort(array.getOdd());
  		array.sort(array.getEven());
  		//输出
  		array.outputArray(array.getOdd());
  		array.outputArray(array.getEven());  
 	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值