关于数组输入--类似于C那种动态分配数组内存的JAVA解决

C语言是通过动态分配内存解决动态数组的。但是java中我们初始化数组必须要指定数组长度或者是指定数组的值。
这个时候有一种做法就是给数组分配一个很大的长度的数组空间,显然这样做是类似于C的解决之道。其实还有更优解。
java中的集合框架啊,其中的List集合更是解决这个问题的不二法门,我们可以先new一个ArrayList,我们把我们最不擅长的动态分配内存这个点交给框架去做就是。再说List转数组List集合的API是有提供的,即toArray()方法。这样做我们就不必关心一组输入值的长度而去考虑给它分配多大的数组空间了。
附携程水题代码:
问题描述:
第一行:n
第二行:n 个整数
第三行:m
第四行:m 个整数
输出:整合n,m个数后的数组的中位数。
/**   
* Copyright: Copyright (c) 2017 Asiainfo
* 
* @ClassName: BTest.java
* @Description: 试题测试
*
* @version: v1.0.0
* @author: wantu
* @date: 2017年9月21日 下午8:17:21 
*
* Modification History:
* Date         Author          Version            Description
*---------------------------------------------------------*
* 2017年9月21日     wantu           v1.0.0               修改原因
*/
package com.briup.test;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Scanner;
import java.util.Set;

/**   
* Copyright: Copyright (c) 2017 Asiainfo
* 
* @ClassName: BTest.java
* @Description: 求合并数组的中位数
*
* @version: v1.0.0
* @author: wantu
* @date: 2017年9月21日 下午8:17:21 
*
* Modification History:
* Date         Author          Version            Description
*---------------------------------------------------------*
* 2017年9月21日     wantu           v1.0.0               修改原因
*/
public class BTest {
    public static void main(String[] args) {
        Scanner scanner  = new Scanner(System.in);
        System.out.println("输入N");
        int n = scanner.nextInt();
        //过多无用的内存了,造成大量的内存没有使用
        /*String[] a = new String[999];
String[] b = new String[999];*/
        List<String> a = new ArrayList<>();
        List<String> b = new ArrayList<>();
        String[] result = null;
        for(int i=0; i < n;i++){
            a.add(scanner.nextInt()+"");

        }
        System.out.println("输入M:");
        int m = scanner.nextInt();
        for(int i=0; i < m;i++){
            b.add(scanner.nextInt()+"");
        }
        result =union(a, b);
        System.out.println("合并数组长度:"+result.length+"值为:");
        for(int i =0;i<result.length;i++){
            System.out.println(result[i]);
        }
        int index = (result.length)/2;
        int index2 = result.length;
        int mid = (index2-1)/2;
        if(result.length%2==0){
            System.out.println((Integer.parseInt(result[mid])+Integer.parseInt(result[mid+1]))*1.0/2);
        }else{
            System.out.println(Integer.parseInt(result[(index2-1)/2]));
        }
    }
    public static String[] union(List<String> arr1, List<String> arr2) {   
        Set<String> set = new HashSet<String>();   
        for (String str : arr1) {
            set.add(str);   
        }   
        for (String str : arr2) {   
            set.add(str);   
        }   
        String[] result = {};   
        return set.toArray(result);   
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值