0

だから私はLotteryクラスとクラスを示すクラスを書いていLotteryます。作業が完了し、コンパイルされますが、実行すると取得されます

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4  
at LotteryDemo.main(LotteryDemo.java:21)

これが私がコードに持っているものです。どんな助けでも大歓迎です!

Lotteryクラス:

    import java.util.Random;


import java.util.Scanner;

   public class Lottery
   {


  int NUM_DIGITS = 5;   
  int[] lotteryNumbers = new int[4];




  public Lottery(){
     Random rand = new Random();
     lotteryNumbers[0] = rand.nextInt(10);
     lotteryNumbers[1] = rand.nextInt(10);
     lotteryNumbers[2] = rand.nextInt(10);
     lotteryNumbers[3] = rand.nextInt(10);
     lotteryNumbers[4] = rand.nextInt(10);
     getLotteryNums();

  }


  public int numIntsInCommon(int[] picks){
     int inCommon = 0;

     for (int counter = 0; counter < 5; counter++)
     {
        for (int index = 0; index < 5; index++)
        {
           if (lotteryNumbers[counter] == picks[index])
              inCommon++;
           return inCommon;
        }
        return inCommon;
     }

     return inCommon;
  }

  public String getLotteryNums(){
     return lotteryNumbers[0] + ", " + lotteryNumbers[1] + ", " + 
                    lotteryNumbers[2] + ", " + lotteryNumbers[3] + ", " +
                    lotteryNumbers[4];
  }




}

LotteryDemoクラス:

    import java.util.*;


   public class LotteryDemo
   {
  public static void main(String[] args)
  {

        Scanner input = new Scanner(System.in);
     int[] userNumbers = new int[4];

     System.out.println("Please supply your lottery picks. Choose unique numbers between 0 and 9.");
     System.out.print("Enter digit 1: ");
        userNumbers[0] = input.nextInt();
        System.out.print("Enter digit 2: ");
        userNumbers[1] = input.nextInt();
        System.out.print("Enter digit 3: ");
        userNumbers[2] = input.nextInt();
        System.out.print("Enter digit 4: ");
        userNumbers[3] = input.nextInt();
        System.out.print("Enter digit 5: ");
        userNumbers[4] = input.nextInt();


    Lottery lottery = new Lottery();


    System.out.print("Lottery Numbers: " + lottery.getLotteryNums());
  System.out.print("Number of matching digits: " + lottery.numIntsInCommon(userNumbers));
    if(lottery.numIntsInCommon(userNumbers) == 5)
        System.out.print("All 5 match! You have hit the jackpot!");
  }


}
4

3 に答える 3

1
int[] lotteryNumbers = new int[4];

これは、配列に 4 つの要素またはlotteryNumbers[0]...があることを意味します。lotteryNumbers[3]

したがってlotteryNumbers[4] = rand.nextInt(10);、上記の例外が発生します。

同様にuserNumbers、例外を引き起こしているメインの場合。

int[] userNumbers = new int[4];
...
userNumbers[4] = input.nextInt(); // java.lang.ArrayIndexOutOfBoundsException
于 2013-01-12T07:57:49.327 に答える
0

Java の配列は、次のようにインスタンス化されます。

type[] name = new type[size]
                       ^

サイズは、配列内のインデックスの数を表します。ご存じのとおり、配列はゼロから始まります。したがって、次のようになります。

int[] userNumbers = new int[4]

次の配列を作成します。

[ ][ ][ ][ ]
 0  1  2  3

userNumbers[4]したがって、存在しません。userNumber[5]5 つのインデックスを作成する必要があります。

于 2013-01-12T08:09:37.633 に答える
0

配列を割り当てると、new int[4]0 から 3 までの番号が付けられた 4 つの要素が含まれます。インデックス 4 の要素にアクセスすると、範囲外になります。

于 2013-01-12T07:58:16.003 に答える