嗨,我正在编写一个彩票方法,用户必须输入两个数字 n 和 k 作为参数。彩票被一个随机队列填满,该队列最多为 k。因此,如果我输入 k=10,队列将容纳 1、2、3、4、5、6、7、8、9、10。参数 n 是必须随机删除的项目数。所以如果我选择 3 那么它可以返回 4,6,8 或者它可以是 1,3,10。
现在如果 n 大于 k 它必须抛出一个错误,说明队列中没有足够的项目可以拉取。因此,如果我输入 n=5 和 k=3,队列中仍有 3 个项目,但我无法从队列中选择 5,因为这太多了。
现在我的问题是我必须返回仍在队列中的项目。所以 n=5 和 k=3 将返回 1,3,2 或 2,3,1 等等。但是我必须在返回该数组后打印一个异常。到目前为止,我能够返回数组,但我无法让 try catch 异常工作。是否有另一种方法我可以尝试返回数组,然后打印出异常,所以它看起来像这样:
%java Lottery 5 2 //calls the method with the arguments n=5 k=2
2 1 //still prints the items in the queue
java.lang.Exception: Not enough items in your queue. // returns the error as well
at Lottery.pickNumbers(Lottery.java:29) //dont pay attention to these line numbers, this was a test case given to us
at Lottery.main(Lottery.java:56)
这是我的代码:
import java.util.*;
import java.math.*;
public class Lottery{
RandomizedQueue rq;
Random Rnum = new Random();
int [] Larray;
// constructs a Lottery class
public Lottery(){
}
// picks the numbers and store them in an array of integers
// int n: number of items to pick
// int k: maximum integer to be picked
public int [] pickNumbers(int n, int k) throws Exception{
rq = new RandomizedQueue();
int [] remainQueue = new int [k];
if(n>k)
{
for(int i=1; i<=remainQueue.length;i++)
{
rq.enqueue(i);
}
for(int i=0; i<remainQueue.length;i++)
{
remainQueue[i] = rq.dequeue();
}
return remainQueue;
}
for(int i =1;i<=k;i++)
{
rq.enqueue(i);
}
Larray = new int[n];
for(int i = 0;i< Larray.length;i++)
{
Larray[i] = rq.dequeue();
}
return Larray;
}
// Do not change main().
public static void main(String [] args) throws Exception{
if (args.length<2){
System.out.println("Please enter your input values.");
System.out.println("e.g. java Lottery [number of integers to pick] [Maximum integer to be picked]");
}else{
int n = Integer.parseInt(args[0]);
int k = Integer.parseInt(args[1]);
Lottery l = new Lottery();
try{
int [] picked = l.pickNumbers(n,k);
for (int i = 0; i< picked.length; i++){
System.out.print(picked[i]+" ");
}
System.out.println();
}catch (Exception e){
e.printStackTrace();
}
}
}
}