こんにちは、ユーザーが引数として n と k の 2 つの数字を入力する必要がある宝くじメソッドを作成しています。宝くじは、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();
}
}
}
}