2013-01-12 52 views
0

所以我写了一个Lottery类和类,演示Lottery类。我所做的工作,它编译,但是当我运行它,我得到Java彩票分类

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!"); 
    } 


} 
+0

检查Stacktrace给出行号..在发生异常的地方 – exexzian

回答

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 
0

您分配与new int[4]您的阵列,这意味着它具有编号为0至3。 当访问具有索引4的元件是出界4个元素。

0

阵列在Java中有实例如下:

type[] name = new type[size] 
        ^

大小代表数目在一个数组索引的。大家知道,阵列从零开始,从而:

int[] userNumbers = new int[4] 

使得数组:

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

userNumbers[4]因此不存在。您需要为五个索引创建userNumber[5]