问:有1到100个数字,将这些数字随机放到长度为98的数组中,找出剩余的2个数

有1到100个数字,将这些数字随机放到长度为98的数组中,找出剩余的2个数

[code="java"]package test;

import java.util.Random;

public class RandTest {
public static void main(String[] args){
/*
* 可以考虑先把这100个数放在一个数组内,
* 每次随机取一个位置(第一次是1-100,第二次是1-99,...),
* 将该位置的数与最后一个位置(每次都在变化,第一次100,第二次99...)的数对调就可以了。
*/
int[] arr= new int[100];
//初始化数组
for(int i=0;i<=99;i++)
{
arr[i] = i+1;
}
//随机数
Random r = new Random();
//这个for循环,相当如先从100个随机的位置选一个,放在第100个的位置上
//又随机一个0到98的数作为被选的位置号,选一个后,从剩下99个又选一个放在第99的位置上,
//一次类推。
for (int j = 99; j >= 1; j--)
{
//j从最后一个位置减少到第二个位置。
int address = r.nextInt(j);
//j位置和随机生成位置上的数值对换。
int tmp = arr[address];
arr[address] = arr[j];
arr[j] = tmp;
}
//最后,从最后后面位置开始取98个数放入数组
//第一和第二就是剩下的2个数值。

 //测试输出 
 for(int k : arr){ 
 System.out.println(k+" "); 
 } 

}
}[/code]

题目没有描述清楚,数字的范围是什么?

把所有数字都放入HashMap中
key为数字,value随便,比如为1吧

for循环遍历长度为98的数组,
对hashmap移除当前数字的key
最后剩下的2个数就是

[code="java"]

import java.util.HashMap;
import java.util.Random;
import java.util.Set;

public class NumberTest {

/**
 * @param args
 */
public static void main(String[] args) {

    HashMap map = new HashMap();

    for(int i=1;i<101;i++)
    {
        map.put(i, 1);
    }

    Random r = new Random();
    int[] nums = new int[98];
    for(int i=0;i<98;i++)
    {
        //给数组随机赋值
        nums[i] = i+1;          
    }

    //找到剩下的两个数
    for(int i=0;i<98;i++)
    {
        map.remove(nums[i]);                    
    }

    Set keys = map.keySet();

    System.out.println("剩下的两个数为:" + keys);
}

}
[/code]