(Arraylist)用户定义的字符串输入

时间:2016-11-26 16:57:12

标签: java arraylist

该程序的目的是让用户输入5个数字并选择他们想要将它们与哪个游戏进行比较(lotto / lottoplus1 / lottoplus2),每个游戏都有一组唯一的5个数字,然后存储在数组列表。

  

全国彩票每晚抽三局:乐透,乐透加一,乐透加2。

     

为每个抽奖生成数字。

     

当用户输入一行数字时,他们还应输入:“lotto”,“plus1”或“plus2”以指定应将其数字与哪些抽奖进行比较。

     

然后应该将该值分配给该特定的数字行,并且应该根据需要将该行上的数字与每组乐透号进行比较。

继承我的问题!当我输入我的五个数字时,然后让'plus1'将这些数字的比较分配给lotteryPlusOne,它会崩溃并输出以下信息:

lottoapp.LottoApp.main(LottoApp.java:61)中的lottoapp.lottoCounter.compareNums(lottoCounter.java:136)中的线程“main”java.lang.NullPointerException中的异常C:\ Users \ x15587907 \ AppData \ Local \ NetBeans \ Cache \ 8.1 \ executor -snippets \ run.xml:53:Java返回:1 BUILD FAILED(总时间:15秒)

下面是第136行,它位于public void compareNums()方法的Instantiable类中 l = madeUpArrayList.get(i); < -----

主要应用程序

package lottoapp;

import javax.swing.JOptionPane;
import java.util.ArrayList;
import java.util.Arrays;

public class LottoApp {

public static void main(String[] args) {
    //declare vars/objects/arrays
    int[] lottery = new int[5];             //5 Winning numbers
    int[] lotteryPlus1 = new int[5];        //5 Winning LP1 numbers
    int[] lotteryPlus2 = new int[5];        //5 Winning LP2 numbers        
    String gameType;
    int number1;
    int number2;
    int number3;
    int number4;
    int number5;

    //array list called madeUpArrayList
    ArrayList<lottoCounter> madeUpArrayList = new ArrayList();

    //object declare and create
    lottoCounter myCount = new lottoCounter();

    //winNums/getLottery need to be initialised at top of program
    myCount.winNums();
    lottery = myCount.getLottery();
    lotteryPlus1 = myCount.getLotteryPlus1();
    lotteryPlus2 = myCount.getLotteryPlus2();

    //Displays winning numbers (Testing Purposes)
    System.out.println(Arrays.toString(lottery));
    System.out.println(Arrays.toString(lotteryPlus1));
    System.out.println(Arrays.toString(lotteryPlus2));

    //Array List
    for (int i = 0; i < 1; i++) {
        lottoCounter l = new lottoCounter();
        number1 = Integer.parseInt(JOptionPane.showInputDialog(null, "Enter number 1 "));
        number2 = Integer.parseInt(JOptionPane.showInputDialog(null, "Enter number 2 "));
        number3 = Integer.parseInt(JOptionPane.showInputDialog(null, "Enter number 3 "));
        number4 = Integer.parseInt(JOptionPane.showInputDialog(null, "Enter number 4 "));
        number5 = Integer.parseInt(JOptionPane.showInputDialog(null, "Enter number 5 "));
        gameType = JOptionPane.showInputDialog(null, "Select a game type for comparison ... lotto/plus1/plus2");

        l.setNumber1(number1);
        l.setNumber2(number2);
        l.setNumber3(number3);
        l.setNumber4(number4);
        l.setNumber5(number5);
        l.setGameType(gameType);

        madeUpArrayList.add(l);
    }

    //Comparison
    myCount.compareNums();

    //Output Lotto,Lotto Plus One and Lotto plus Two correct guesses
    JOptionPane.showMessageDialog(null, "Guesses correct for Regular Lottery correct is " + myCount.getCorrectLotto());
    JOptionPane.showMessageDialog(null, "Guesses correct for Lottery Plus One is " + myCount.getCorrectPlusOne());
    JOptionPane.showMessageDialog(null, "Guesses correct for Lottery Plus Two is " + myCount.getCorrectPlusTwo());

}

}

可实例化的课程

package lottoapp;

import java.util.ArrayList;

public class lottoCounter {

//Variables/Constants/data members
private int correctLotto;
private int correctPlusOne;
private int correctPlusTwo;
private int[] lottery = new int[5];
private int[] lotteryPlus1 = new int[5];
private int[] lotteryPlus2 = new int[5];
private int number1;
private int number2;
private int number3;
private int number4;
private int number5;
private String gameType;
private ArrayList<lottoCounter> madeUpArrayList;

//Constructor
lottoCounter() {
    correctLotto = 0;
    correctPlusOne = 0;
    correctPlusTwo = 0;
    number1 = 0;
    number2 = 0;
    number3 = 0;
    number4 = 0;
    number5 = 0;
    gameType = " ";
}

//setters 
public void setCorrectLotto(int correctLotto) {
    this.correctLotto = correctLotto;
}

public void setCorrectPlusOne(int correctPlusOne) {
    this.correctPlusOne = correctPlusOne;
}

public void setCorrectPlusTwo(int correctPlusTwo) {
    this.correctPlusTwo = correctPlusTwo;
}

public void setLottery(int[] lottery) {
    this.lottery = lottery;
}

public void setLotteryPlus1(int[] lotteryPlus1) {
    this.lotteryPlus1 = lotteryPlus1;
}

public void setLotteryPlus2(int[] lotteryPlus2) {
    this.lotteryPlus1 = lotteryPlus2;
}

public void setNumber1(int number1) {
    this.number1 = number1;
}

public void setNumber2(int number2) {
    this.number2 = number2;
}

public void setNumber3(int number3) {
    this.number3 = number3;
}

public void setNumber4(int number4) {
    this.number4 = number4;
}

public void setNumber5(int number5) {
    this.number5 = number5;
}

public void setGameType(String gameType) {
    this.gameType = gameType;
}

public lottoCounter(ArrayList<lottoCounter> madeUpArrayList) {
    this.madeUpArrayList = madeUpArrayList;
}

//COMPUTE
//Lottery Generator | random num generator (1-40)Lottery
public void winNums() {
    for (int i = 0; i < lottery.length; i++) {//Generating 1 to 40  numbers
        lottery[i] = (int) Math.floor(1 + Math.random() * 40);//Using Math.random
        for (int j = 0; j < i; j++) {

            if (lottery[i] == lottery[j]) {
                i--;
            }
        }
    }

    //Lottery plus 1 generator 
    for (int i = 0; i < lotteryPlus1.length; i++) {//Generating 1 to 40  numbers
        lotteryPlus1[i] = (int) Math.floor(1 + Math.random() * 40);//Using Math.random
        for (int j = 0; j < i; j++) {

            if (lotteryPlus1[i] == lotteryPlus1[j]) {
                i--;
            }
        }
    }

    //Lottery plus 2 generator 
    for (int i = 0; i < lotteryPlus2.length; i++) {//Generating 1 to 40  numbers
        lotteryPlus2[i] = (int) Math.floor(1 + Math.random() * 40);//Using Math.random
        for (int j = 0; j < i; j++) {

            if (lotteryPlus2[i] == lotteryPlus2[j]) {
                i--;
            }
        }
    }

}


//Counter for Lottery/LotteryPlusOne/LotteryPlusTwo (COMPARISON)   
public void compareNums() {
    for (int i = 0; i < 1; i++) {
        for (int j = 0; j < 5; j++) {
            lottoCounter l;
            l = madeUpArrayList.get(i);

            if (l.getGameType().equals("lotto")) {
                if (lottery[j] == l.getNumber1() || lottery[j] == l.getNumber2() || lottery[j] == l.getNumber3() || lottery[j] == l.getNumber4() || lottery[j] == l.getNumber5()) {
                    correctLotto++;
                }
            }
            if (l.getGameType().equals("plus1")) {
                if (lotteryPlus1[j] == l.getNumber1() || lotteryPlus1[j] == l.getNumber2() || lotteryPlus1[j] == l.getNumber3() || lotteryPlus1[j] == l.getNumber4() || lotteryPlus1[j] == l.getNumber5()) {
                    correctPlusOne++;
                }
            }
            if (l.getGameType().equals("plus2")) {
                if (lotteryPlus2[j] == l.getNumber1() || lotteryPlus2[j] == l.getNumber2() || lotteryPlus2[j] == l.getNumber3() || lotteryPlus2[j] == l.getNumber4() || lotteryPlus2[j] == l.getNumber5()) {
                    correctPlusTwo++;
                }
            }
        }
    }
}

//getters (return values to App Class)
public int getCorrectLotto() {
    return correctLotto;
}

public int getCorrectPlusOne() {
    return correctPlusOne;
}

public int getCorrectPlusTwo() {
    return correctPlusTwo;
}

public int[] getLottery() {
    return lottery;
}

public int[] getLotteryPlus1() {
    return lotteryPlus1;
}

public int[] getLotteryPlus2() {
    return lotteryPlus2;
}

public int getNumber1() {
    return number1;
}

public int getNumber2() {
    return number2;
}

public int getNumber3() {
    return number3;
}

public int getNumber4() {
    return number4;
}

public int getNumber5() {
    return number5;
}

public String getGameType() {
    return gameType;
}

public ArrayList<lottoCounter> getMadeUpArrayList() {
    return madeUpArrayList;
}

}

1 个答案:

答案 0 :(得分:0)

我不确定其他人,但有更多信息会更好,例如数组中的数据:lotterylotteryPlus1madeUpArrayList等。只是为了确保他们确实包含任何数据,因为根据您的Exception,您的班级第136行的方法java.lang.NullPointerException中有一个compareNums。因为您没有发布行号,所以我不确定异常何时发生。

我假设你的一个数组中没有任何数据,或者你的一个或多个数组中没有5个数据条目因为你的for循环迭代了5次。但是再次没有看到你的阵列被实例化的方式或时间,我认为任何人都不可能确认这是你问题的原因。例如,lotteryPlus2[]可能只包含lotteryPlus2[0]lotteryPlus2[1]lotteryPlus2[2]的数据,因此当j在循环lotteryPlus2[3]中变为3时存在并抛出java.lang.NullPointerException

另外,我很好奇你为什么使用它来循环for (int i = 0; i < 1; i++){}

这个循环只循环一次,无论如何,为什么要在那里循环呢,因为你的main method总会至少运行一次?诚实的问题,我是一名初学程序员,因此您可能会将其用于我不了解的事情。